• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

keras

date: 2022-02-02 excerpt: kerasの使い方

tag: statisticskerasdeep learningpython


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() # メモリリーク対策
  • 参考
    • Dealing with memory leak issue in Keras model training


statisticskerasdeep learningpython Share Tweet