🐘

【図解】keras でモデルにデータを入れて結果をみてみる

2022/09/06に公開

はじめに

前回は、Keras でモデルを作成し、層を追加することができました。

↓ 前回の内容
https://zenn.dev/nekoallergy/articles/keras-create-model01

作成したモデルはまだ不完全ですが、既に動かせる状態です。つまり、このモデルに何かのデータを入力すると、何かしらの出力を返してくれます。

まだ学習をしていないので出力される数値に意味はありませんが、モデルの動作やデータ形状を確認するために、順伝搬させてみましょう。

今回の目的

  • モデルの動作や、データ形状を確認する
  • モデルにデータを入れて、出力される結果を見てみる

[準備] モデル作成

まずは、モデルを作ります。

このモデルは、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 通り試してみます。

  1. tensorflow で作ったランダムなデータを入れてみる
  2. 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 で作成したデータも入力してみましょう。

.
.
.


続きの内容は本にまとめてあります。手に取って頂けるととても喜びます ↓
https://zenn.dev/nekoallergy/books/deeplearning-advanced

人工知能/AI/機械学習をもっと詳しく

ねこアレルギーのAI

ねこアレルギーの AI
YouTube で機械学習について発信しています。お時間ある方は覗いていただけると喜びます。



Created by NekoAllergy

Discussion