【図解】keras でモデルにデータを入れて結果をみてみる
はじめに
前回は、Keras でモデルを作成し、層を追加することができました。
↓ 前回の内容
作成したモデルはまだ不完全ですが、既に動かせる状態です。つまり、このモデルに何かのデータを入力すると、何かしらの出力を返してくれます。
まだ学習をしていないので出力される数値に意味はありませんが、モデルの動作やデータ形状を確認するために、順伝搬させてみましょう。
今回の目的
- モデルの動作や、データ形状を確認する
- モデルにデータを入れて、出力される結果を見てみる
[準備] モデル作成
まずは、モデルを作ります。
このモデルは、5 個の数値が入力されると、モデル内部で計算し、10 個の数値を出力してくれる変換器です。実際の人工知能を作る際には、問題に合わせて入出力のサイズを決めましょう。
# 必要なライブラリの読み込み
import numpy as np
import tensorflow as tf
from keras.layers import Dense
# モデルを作成
model = tf.keras.Sequential(name="my_model")
# addメソッドで層を追加
model.add(Dense(units=10, input_shape=(5,)))
model.add(Dense(units=10))
# summaryメソッドでモデル構造を確認
model.summary()
Model: "my_model"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_12 (Dense) (None, 10) 60
dense_13 (Dense) (None, 10) 110
=================================================================
Total params: 170
Trainable params: 170
Non-trainable params: 0
_________________________________________________________________
このモデルにダミーのデータを入れてみましょう。今回は 2 通り試してみます。
- tensorflow で作ったランダムなデータを入れてみる
- numpy で作ったランダムなデータを入れてみる
この 2 つは型が違うため、扱いが少しずつ違いますが、どちらも同じようにモデルに入力させることができます。
入力するデータは、input_shape
で指定した通り、5
である必要があります。5 つの数値を持つデータを作りましょう。
順伝搬 01 (tf.random を入力してみる)
# (1, 5)の形を持つデータを作成(tf)
input_data_1 = tf.random.normal([1, 5])
(1, 5)
の形を持つダミーデータinput_data_1
を生成しました。
最初の1
は、バッチサイズを表しています。keras モデルに入力するデータは、必ずバッチ単位で入力しなくてはいけません。また、5
はデータのサイズです。
つまり、(1, 5)
は、「5 つの数値の固まりが 1 つある」というイメージです。
もし、データの数が 2 つ 3 つと増えた場合には、(2, 5)
や(3, 5)
のような形状に変わります。
print(input_data_1)
<tf.Tensor: shape=(1, 5), dtype=float32, numpy=
array([[ 1.2442665 , -0.3743595 , 0.24725996, 0.30672526, 0.77205807]],
dtype=float32)>
input_data_1
の中身を見てみると、ランダムな数値を持つダミーデータが生成できていることが分かります。
このデータをmodel
に入力してみましょう。
result = model(input_data_1)
上記のように、model
の引数に渡すだけで OK です。この操作だけで、モデル内で順伝搬が行われ、計算結果が導き出されます。もし、入力データのサイズが違うとエラーになるので、試してみてください。
そして、モデルの出力はresult
変数に入ります。結果を見てみましょう。
print(result)
<tf.Tensor: shape=(1, 10), dtype=float32, numpy=
array([[-0.15546305, 1.3089052 , -0.5774516 , 0.07168823, 0.46354163,
-0.2547316 , -0.555171 , 0.42036998, -0.83164984, -0.29207233]],
dtype=float32)>
10 個の数値が返ってきていることが分かります。これがモデルから出力された結果です。
このように、モデルにデータを入力すると、モデルの中で計算が行われ、最終的な結果が出力されます。データの形状は、model.output_shape
で確認した通り、(None, 10)
で出力されていることが分かります。今回の結果の形状は(1, 10)
です。これは、入力データのバッチサイズが1
だったからです。
今回は、ランダムなデータを入力したので、出力された数値に意味はありませんが、正しい形状の結果を出力してくれることがわかりました。
順伝搬 02 (np.random を入力してみる)
同様に、numpy で作成したデータも入力してみましょう。
.
.
.
続きの内容は本にまとめてあります。手に取って頂けるととても喜びます ↓
人工知能/AI/機械学習をもっと詳しく
ねこアレルギーの AI
YouTube で機械学習について発信しています。お時間ある方は覗いていただけると喜びます。
Created by NekoAllergy
Discussion