は、誰もが同じを探している場合には、私は(この記事では、特定のネットワークに基づいて)ここに掲載:
考えられるのは、カスタマイズされた損失関数を定義し、それをネットワークの出力として使用することです。 (表記:A
は変数A
の真のラベルであり、そしてA'
は、変数A
の予測値である)ご返信用
def customized_loss(args):
#A is from the training data
#S is the internal state
A, A', S, S' = args
#customize your own loss components
loss1 = K.mean(K.square(A - A'), axis=-1)
loss2 = K.mean(K.square(S - S'), axis=-1)
#adjust the weight between loss components
return 0.5 * loss1 + 0.5 * loss2
def model():
#define other inputs
A = Input(...) # define input A
#construct your model
cnn_model = Sequential()
...
# get true internal state
S = cnn_model(prev_layer_output0)
# get predicted internal state output
S' = Dense(...)(prev_layer_output1)
# get predicted A output
A' = Dense(...)(prev_layer_output2)
# customized loss function
loss_out = Lambda(customized_loss, output_shape=(1,), name='joint_loss')([A, A', S, S'])
model = Model(input=[...], output=[loss_out])
return model
def train():
m = model()
opt = 'adam'
model.compile(loss={'joint_loss': lambda y_true, y_pred:y_pred}, optimizer = opt)
# train the model
....
ありがとう!私の主な関心事は、私の損失機能の形成方法です。はい、両方の出力を1つにまとめることはできますが、内部出力(xn ')の損失を計算するときは、内部出力(xn)のラベルを取得するためにモデル自体にアクセスする必要があります。 xnは訓練データではなく、モデルによって処理された訓練データのある種の変換である。 – ljklonepiece
@LiJuekunは、フィットするために渡すy値に「内部ラベル」を入れることはできませんか? –