3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

シングルタスク学習モデルからマルチタスク学習モデルへの移行

Posted at

#マルチタスク学習とは
マルチタスク学習モデルとは、1つのネットワークで複数のタスクを解くモデルです。
今回は、1入力1出力のシングルタスク学習モデルから1入力2出力のマルチタスク学習モデルへ変更を行ったため、備忘録としてこの記事を残します。

#実行環境

  • Python 3.6.10
  • Keras 2.2.4
  • tensorflow 1.14.0

#変更前のモデル構造
model_before.png

#変更後のモデル構造
model_after.png

#コードの変更点
###Sequential vs Functional API

シングルタスク学習モデルでは基本的にSequentialを使うことが多いが、マルチタスク学習モデルではFunctional APIを使う。そのため、コードはかなり変更する必要がある。
詳しくは以下の公式ドキュメントチェック。

###Sequentialを使ったモデル(変更前)

model = Sequential()
model.add(Bidirectional(LSTM(n_hidden, return_sequences=False, batch_input_shape=(None,799,1))))
model.add(BatchNormalization())
model.add(Dense(3))
model.add(Activation("linear"))
model.compile(loss="mean_absolute_error", optimizer="Adam", metrics=["accuracy"])
history = model.fit(X_train, y_train, batch_size=256, epochs= 120, validation_split=0.05)

###Functional APIを使ったモデル(変更後)

input1 = Input(shape = (799, 1))
layer1 = Bidirectional(LSTM(n_hidden))(input1)
layer2 = BatchNormalization()(layer1)
layer3_1 = Dense(2)(layer2)
out1= Activation("linear", name = 'out1')(layer3_1)

layer3_2 =  Dense(1)(layer2)
out2= Activation("linear", name = 'out2')(layer3_2)

model = Model(inputs=input1, outputs=[out1, out2]) 
model.compile(optimizer='Adam',
              loss={'out1': 'mean_absolute_error', 'out2': 'mean_absolute_error'},
              loss_weights={'out1': 0.7, 'out2':0.2},
              metrics=['accuracy'])

history = model.fit(X_train, [y_train1, y_train2], batch_size=256, epochs= 5, validation_split=0.05)

###変更するにあたって

  • Functional APIを使うに当たって、新たにimportするものがいくつかあった(Input, Modelなど)
  • モデルの出力を2つにするにあたり、学習データの出力も2つ(y_train→[y_train1, y_train2])にする。
  • outputの名前をつけないと(コードのActivationのところ)、lossの定義のところでエラーが出るので注意。
  • ロスのウェイトについては、チューニングが必要。今後また記事を出すかも。
  • 1行目のInput(shape = (799,1)) をinput1に代入後、shapeを確認すると(?, 799, 1)となる(次元が一つ増える)。これでかなりの時間格闘したので、今後これについても記事にするかも。
3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?