複数出力の回帰をKerasで行います。
通常、回帰分析は複数の説明変数に一つの目的変数なのですが、これは、複数の目的変数を取ることができます。
multivariateとmultivariableの違いはこのあたりを参照のこと。
コードはこちらを参考にこんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | [[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 ]] |
ちゃんと学習できているようです