kerasの使い方
概要
- tensorflowの機能の一部
- tensorflowに比べて書き方が簡単
インストール
ubuntu, debian
$ python3 -m pip install tensorflow-gpu # gpuを使用しないならば tensorflow
$ python3 -m pip install keras
GPUが有効であるか確認
import tensorflow as tf
assert tf.test.is_gpu_available() == True
- 使用不能の場合、原因が表示される
モデルを作成する
Sequential
from tensorflow.keras.models import Sequential
model = Sequential()
model.add(...)
model.add(...)
model.compile()
- レイヤーをaddしていくことでモデルを作成する
レイヤー
from tensorflow.keras.layers import Dropout, Dense, Embedding, Lambda
Embedding
- integer型を対応するワンホットのベクトルに直して特定の次元にマップする
- nlpタスクなどで有効
Embedding(input_dim, output_dim, input_length))
input_dim
- integerの最大数
output_dim
- 出力次元
input_length
- integerの系列の長さ
Lambda
- 任意の操作を行う
- 入力されたデータの平均を計算するなど
Lambda(lambda x: K.mean(x, axis=1), output_shape=(200,))
- 横軸に対して平均を計算
Embedding
の横に長いベクトルの次元が減る
Dropout
- ドロップアウト
Dropout(rate=0.5, seed=0))
rate
- どれだけドロップ・アウトするか
seed
- シード
Dense
- 全結合層
Dense(200, activation='relu')
activation
- 活性化関数
モデルのロードとセーブ
ロード
model = keras.models.load_model("my_model")
セーブ
model.save("my_model")
モデルの可視化
- jupyterなどを利用するとモデルのネットワークを可視化できる
from keras.utils.vis_utils import plot_model # グラフの可視化
# modelはコンパイル済みである必要がある
plot_model(model, to_file='model_plot.png', show_shapes=True, show_layer_names=True)
utils
keras.utils.np_utils
- 数字からワンホットのベクトルを作成できる
y = np_utils.to_categorical(labels, SIZE)
labels: List[int]
- ワンホットに変換したい数字の列
SIZE: int
- ワンホット変換時のベクトルの大きさ
y: List[List[int]]
tensorflow.keras.preprocessing.sequence
- 数字の列を特定の長さへpaddingを行う
x = sequence.pad_sequences(contexts, maxlen=maxlen)
contexts: List[List[int]]
- 入力のベクトル
maxlen: int
- paddingを行って作成する
x: List[List[int]]
トラブルシューティング
train時のメモリリークに対応する
model.train_on_batch(...)
等を回している時、セッション情報が解放されなくて結果としてメモリリークになる- batchの終わりやtrainプロセスの終わりに
K.clear_session()
すると良い
for x, y in tqdm(generate_data(...)):
loss += model.train_on_batch(x, y)
K.clear_session() # メモリリーク対策