Tensorflow Keras 〜初めてのKeras〜

イントロダクション

Tensorflowでの計算処理をするのに色々試したけど結局はチュートリアルを見るのが一番ということになりました。

そしてここから学習を始めるように書いてあったので、そのようにします。

tensorflow.keras ※参考サイト

ここのチュートリアルから始めます。とりあえずは以下のコマンドを叩いてください。

!pip install -q pyyaml

しかし。自分の環境ではうまく行かなかったので以下のコマンドを叩きました。

pip3 install matplotlib

そして改めて「!pip〜」のコマンドを叩きました。しかしエラーが出ました。。。

とりあえずは無視してそのまま実行することにして。。。以下の起動確認をします。

kerasTest.pyを作成しました。下のコードです。 

import tensorflow as tffrom tensorflow.keras import layers

print(tf.VERSION)print(tf.keras.__version__)

そして実行します

python kerasTest.py

問題なく処理結果が出力されたのでとりあえずは問題なさそうです。

順次モデル※翻訳した時の文言

そして、単純なモデルを作成します。※コピペ

model = tf.keras.Sequential()
# Adds a densely-connected layer with 64 units to the model:
model.add(layers.Dense(64, activation='relu'))
# Add another:
model.add(layers.Dense(64, activation='relu'))
# Add a softmax layer with 10 output units:
model.add(layers.Dense(10, activation='softmax'))


「model = tf.keras.Sequential()」で空のモデルを作ります。ちなみにこの行以降は「何か」をモデルに追加しているのですが、意味はわかりませんでした。

レイヤー

model.add(layers.Dense(XX, activation='関数名')
  • activation:レイヤーの起動機能を設定します。このパラメーターは、組み込み関数の名前または呼び出し可能オブジェクトとして指定されています。デフォルトでは、アクティブ化は適用されません。
  • kernel_initializerそしてbias_initializer:レイヤーの重みを作り出す初期化スキーム(カーネルとバイアス)。このパラメーターは名前または呼び出し可能オブジェクトです。これはデフォルトで"Glorot uniform"イニシャライザになります。
  • kernel_regularizerそしてbias_regularizer:例えばL1またはL2正則としてレイヤの重み(カーネルとバイアス)、適用正則化スキーム。デフォルトでは、正則化は適用されません。

下はレイヤー作成のサンプルコードです。

# Create a sigmoid layer:layers.Dense(64, activation='sigmoid')# Or:layers.Dense(64, activation=tf.sigmoid)

# A linear layer with L1 regularization of factor 0.01 applied to the kernel matrix:layers.Dense(64, kernel_regularizer=tf.keras.regularizers.l1(0.01))

# A linear layer with L2 regularization of factor 0.01 applied to the bias vector:layers.Dense(64, bias_regularizer=tf.keras.regularizers.l2(0.01))

# A linear layer with a kernel initialized to a random orthogonal matrix:layers.Dense(64, kernel_initializer='orthogonal')

# A linear layer with a bias vector initialized to 2.0s:layers.Dense(64, bias_initializer=tf.keras.initializers.constant(2.0))

トレーニングと評価

今までの部分を整理します。

# 空のモデル作成
model = tf.keras.Sequential([
# レイヤーを追加
layers.Dense(64, activation='relu'),
# もう1つ(なぜ追加しているかは不明)
layers.Dense(64, activation='relu'),
# ソフトマックスを追加
layers.Dense(10, activation='softmax')])

# 学習プロセスの構成
model.compile(optimizer=tf.train.AdamOptimizer(0.001),
              loss='categorical_crossentropy',
              metrics=['accuracy'])

ここまできたら、あとは学習と評価をします。

model.fit(data, labels, epochs=10, batch_size=32)
 実行結果は下のようになりました。ソースはGITにアップしています
エポック1/10 
1000/1000 [============================ 218us /ステップ - 損失:11.6670  -  categoryorical_accuracy :0.0950 
Epoch 2/10 
1000/1000 [=========================  -   -  0秒43us / step  - 損失:11.5966 -  Categorical_accuracy:0.1040 
Epoch 3/10 
1000/1000 [============================================================= 1 0 41us / step  -  loss :11.5854 - categorical_accuracy:0.1160 
エポック4/10 
1000分の1000 [==============================] - 0の50US /ステップ- 喪失:11.5768  -  categorical_accuracy:0.0970 
Epoch 5/10 
1000/1000 [=====================================================================================================================================との関係はありません。 / step  -  loss:11.5758  -  categorical_accuracy:0.1000 
Epoch 6/10 
1000/1000 [=============================]  - 0秒62us /ステップ - 損失:11.5733  -  Categorical_accuracy:0.1020
エポック7/10 
1000/1000 [=======================  -  61秒/ステップ - 損失:11.5774  -  categoryorical_accuracy :0.1050 
Epoch 8/10 
1000/1000 [=========================  -   -  61秒/ステップ - 損失:11.5712 -  Categorical_accuracy:0.1110 
Epoch 9/10 
1000/1000 [========================================================================================== 1 :11.5688  -  categorical_accuracy:0.1220 
Epoch 10/10 
1000/1000 [=======================================================================================  -   -  1秒60秒/ステップ - 損失:11.5668  - カテゴリ精度:0.1240


現段階でわかったこと

Tensorflowでの機械学習は以下の手順を踏む

  1. モデルを作る
  2. モデルにレイヤーというものを追加する
  3. オプティマイザを使って学習プロセスを構成する
  4. 評価、予測などを行う

モデル、レイヤー、オプティマイザの3つを使用して学習プロセスの構成及び評価、予測などを行う。そしてこれらを以下の手法で拡張することができる

  1. モデルのサブクラス化:学習モデルの拡張
  2. カスタムレイヤー:レイヤー(シグモイド、ソフトマックスなど)
  3. コールバック:下記参照

今日はこの辺でいっぱいいっぱいです。

でわでわ。。。

[rakuten ids="aburajin:10011766"]

投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す