我有一个方法train_model
,它获取一个keras模型对象作为输入并对其进行训练。我在代码的其他地方有一个循环,该循环在每次迭代中创建一个新模型并将其传递给此方法。如果我没有通过TensorBoard回调,则我的代码可以正常工作。但是,当我通过TensorBoard回调时,第一个网络受到训练,但第二个网络却出现此错误:
tensorflow.python.framework.errors_impl.InvalidArgumentError:您必须为占位符张量'dense_7_target'输入dtype float和形状[?,?]的值 [[{{node density_7_target}} = Placeholderdtype = DT_FLOAT,shape = [?,?],_ device =“ / job:localhost /副本:0 / task:0 / device:CPU:0”]]
在调用.fit
方法之后。 (我正在建立的网络是5层)
,还有更多意外行为: 当我第二次运行此代码时,第一个网络将不需要培训(因为我已经保存了模型,它只会加载该模型),第二个网络得到了没有错误的训练,但是我得到了相同的错误。第三网络。
在这种情况下,当我检查TensorBoard图时,我看到第一个网络已正确创建,但是第二个网络具有应具有的两倍的层(就像第一个模型先加载然后第二个模型加载一样)网络就建立在上面)。
这是我的train_model
方法:
def train_model(model, data, dataname, MODEL_DIR, LOG_DIR, BS, EP, callbacks):
X_train, Y_train, X_test, Y_test = data
if not os.path.exists(MODEL_DIR):
os.makedirs(MODEL_DIR)
model_callback = tf.keras.callbacks.ModelCheckpoint(MODEL_DIR + dataname + '/',
monitor='mse',
verbose=1,
save_weights_only=True)
tb_callback = tf.keras.callbacks.TensorBoard(log_dir=LOG_DIR + dataname,histogram_freq=10)
callbacks += [model_callback, tb_callback]
if not os.path.exists(MODEL_DIR + dataname + '/'):
model.fit(X_train, Y_train, batch_size=BS, epochs=EP, verbose=0, callbacks=callbacks, validation_split=0.2)
validation_split=0.2)
else:
model.load_weights(MODEL_DIR + dataname + '/')
return model
我已尽力而为,我真的对我的代码出了什么问题没有想法。
感谢您的帮助。预先感谢。