带有张量流的 keras 运行良好,直到我添加回调

Posted

技术标签:

【中文标题】带有张量流的 keras 运行良好,直到我添加回调【英文标题】:keras with tensorflow runs fine, until I add callbacks 【发布时间】:2018-06-19 21:41:51 【问题描述】:

我正在使用 Keras 和 TensorFlow 后端运行模型。一切都很完美:

model = Sequential()
model.add(Dense(dim, input_dim=dim, activation='relu'))
model.add(Dense(200, activation='relu'))
model.add(Dense(1, activation='linear'))

model.compile(loss='mse', optimizer='Adam', metrics=['mae'])

history = model.fit(X, Y, epochs=12, 
                    batch_size=100, 
                    validation_split=0.2, 
                    shuffle=True, 
                    verbose=2)

但只要我包含记录器和回调以便我可以记录 tensorboard,我就会得到 ​​p>

InvalidArgumentError(有关回溯,请参见上文):您必须为占位符张量“input_layer_input_2”提供一个值,其 dtype 为 float 和 shape [?,1329]...

这是我的代码:(实际上,它工作了 1 次,第一次,然后 ecer 出现该错误)

model = Sequential()
model.add(Dense(dim, input_dim=dim, activation='relu'))
model.add(Dense(200, activation='relu'))
model.add(Dense(1, activation='linear'))

model.compile(loss='mse', optimizer='Adam', metrics=['mae'])

logger = keras.callbacks.TensorBoard(log_dir='/tf_logs',
                                     write_graph=True,
                                     histogram_freq=1)

history = model.fit(X, Y, 
                    epochs=12,
                    batch_size=100,
                    validation_split=0.2,
                    shuffle=True,
                    verbose=2,
                    callbacks=[logger])

【问题讨论】:

因为它第一次工作,我会尝试重新启动整个会话。可能你的记忆中有一些变量没有被删除。 我尝试了 %reset 但没有成功。但是尝试完全重新启动内核并成功了。关于如何在不重新启动内核的情况下清除它的任何建议?每次之后都必须这样做有点烦人。 试试这个:from keras import backend as K cfg = K.tf.ConfigProto() cfg.gpu_options.allow_growth = True K.set_session(K.tf.Session(config=cfg)) 【参考方案1】:

tensorboard 回调使用tf.summary.merge_all 函数来收集所有张量以进行直方图计算。正因为如此 - 您的摘要正在从以前的模型中收集未从以前的模型运行中清除的张量。为了清除这些以前的模型尝试:

from keras import backend as K

K.clear_session()

model = Sequential()
model.add(Dense(dim, input_dim=dim, activation='relu'))
model.add(Dense(200, activation='relu'))
model.add(Dense(1, activation='linear'))

model.compile(loss='mse', optimizer='Adam', metrics=['mae'])

logger = keras.callbacks.TensorBoard(log_dir='/tf_logs',
                                 write_graph=True,
                                 histogram_freq=1)

history = model.fit(X, Y, 
                epochs=12,
                batch_size=100,
                validation_split=0.2,
                shuffle=True,
                verbose=2,
                callbacks=[logger])

【讨论】:

以上是关于带有张量流的 keras 运行良好,直到我添加回调的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Keras 中将标量添加到张量或从标量创建张量?

如何在 Keras 中使用张量板显示输入张量

尝试使用tensorflow数据集为keras模型准备CSV

将 KERAS 张量转换为 K.tf.int32

带有张量流的拥抱脸转换器将两个文件保存为模型权重

如何将张量转换为 ndarray(内部带有对抗图像的张量)