cost=keras.losses.mean_squared_error(fin_out[:,:1000,:],epoch_y[:,:1000,:])
所以我要这样定义fin_out:
fin_out=keras.activations.sigmoid(rnn_out)
model = Model(inputs=main_input, outputs=rnn_out)
rnn_out=keras.layers.Dense(513,
kernel_initializer='glorot_uniform',activation='sigmoid')(output)
rnn_out
是我最后一层的输出。
epoch_y
是在我的纪元和训练循环内生成的基本事实数组。
所以当我写:model.compile(optimizer=optimizer,loss=cost)
在epoch_y
迭代生成的循环之外。它说epoch_y
没有定义,当然必须说。
那么如何解决这个问题?
我们可以定义一个与epoch_y
相同维度的占位符,并将其放入成本中,然后将epoch_y分配给该占位符。
那么我们如何在keras中做那个占位符呢?
或其他任何建议?
感谢与问候
答案 0 :(得分:0)
在model.compile(optimizer=optimizer, loss=cost)
中,cost
应该是callable
,基本上是一个以y_true
和y_pred
作为参数的函数,请参见here。
所以您需要给cost=keras.lossses.mean_squared_error
如果要提供自定义损失函数,则应这样做:
def custom_squared_error(y_true, y_pred):
return keras.losses.mean_squared_error(y_true[:, :1000, :], y_pred[:, :1000, :])
# use custom function for loss
model.compile(optimizer=optimizer, loss=custom_squared_error)