複数出力の回帰をKerasで行います。
通常、回帰分析は複数の説明変数に一つの目的変数なのですが、これは、複数の目的変数を取ることができます。
multivariateとmultivariableの違いはこのあたりを参照のこと。
コードはこちらを参考にこんな感じ。
import numpy as np
from keras.layers import Dense,Activation
from keras.models import Sequential
model = Sequential()
model.add(Dense(16, input_shape=(1,)))
model.add(Activation('relu'))
model.add(Dense(16, input_shape=(1,)))
model.add(Activation('relu'))
model.add(Dense(2))
model.compile(loss='mean_squared_error', optimizer='Adam')
inputs = np.zeros((10, 1), dtype=np.float32)
targets = np.zeros((10, 2), dtype=np.float32)
for i in range(10):
inputs[i] = i / 10.0
targets[i, 0] = 1.0-0.1 * i / 2.0
targets[i, 1] = 0.01 * i
model.fit(inputs,targets,epochs=200,batch_size=5)
print(targets)
print(model.predict(inputs))
結果
[[1. 0. ] [0.95 0.01] [0.9 0.02] [0.85 0.03] [0.8 0.04] [0.75 0.05] [0.7 0.06] [0.65 0.07] [0.6 0.08] [0.55 0.09]] [[0.88971126 0.00797045] [0.9289691 0.02162787] [0.8843044 0.02890772] [0.8396398 0.03618753] [0.7949753 0.04346737] [0.7503106 0.0507472 ] [0.70564604 0.058027 ] [0.6609814 0.06530684] [0.61631685 0.07258669] [0.57165223 0.0798665 ]]
ちゃんと学習できているようです