训练多个网络时,keras上的Tensorboard回调会给出InvalidArgumentError

时间:2019-06-03 21:19:13

标签: python tensorflow machine-learning keras tensorboard

我有一个方法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

我已尽力而为,我真的对我的代码出了什么问题没有想法。

感谢您的帮助。预先感谢。

0 个答案:

没有答案