首页 文章

Tensorflow是否支持Keras模型fit()方法和急切执行?

提问于
浏览
2

我正在训练一个Keras模型( tf.keras.models.Sequential ),调用它的方法 fit() .

由于我启用了急切执行,因此训练时间(相同数量的时期)从20.1s上升到49.4s . 此外,培训似乎不再收敛,因为损失保持在9左右(没有急切的执行,它下降到1),而方法 fit() 甚至没有报告所请求的指标"accuracy" .

对Keras模型的热切执行支持?请注意,我在模型上调用方法 fit() ,而不是使用估算器 .

这里是代码片段,用于声明模型并进行培训 . 使用TF 1.7安装pip3的GPU .

tf.enable_eager_execution()

model = tf.keras.models.Sequential([
    tf.keras.layers.InputLayer(input_shape=(11,)) ,
    tf.keras.layers.Dense(64, activation='relu') ,
    tf.keras.layers.Dense(32, activation='relu'),
    tf.keras.layers.Dense(11, activation='softmax')
])

optimizer = tf.train.AdamOptimizer()
# optimizer = 'adam'
model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])

model.fit(x=train_X, y=train_y, epochs=200, batch_size=64, verbose=2)

更新:在Tensorflow GITHUB上提交了#18642号问题 .

2 回答

  • 1

    以下是来自Tensorflow网站的报价here

    计算导数时,有许多参数需要优化 . 当结构化为可重用的类和对象而不是单个顶级函数时,TensorFlow代码更易于阅读 . 热切的执行鼓励在tf.keras.layers模块中使用Keras样式的图层类 . 此外,tf.train.Optimizer类提供了复杂的技术来计算参数更新 .

    这意味着使用Eager执行允许keras层和后续模型 . 至于你的时间安排,链接还提到了如何使用急切停止构建图表 .

    TensorFlow的急切执行是一个必要的编程环境,可以立即评估操作,无需额外的图形构建步骤 . 操作返回具体值,而不是构建计算图以便稍后运行 .

    考虑到您拥有的DENSE层数,这可能会使您的模型更难运行 . 有人可能会纠正我,因为我以前没有做过很多关于DENSE层的工作,或者说我已经很久了 . 如果这不起作用,那么我会调查你的损失函数 . This answer may help if that becomes a problem .

    其他一切看起来都不错 . 希望这可以帮助 .

    EDIT

    好的,我看到你说的是命运 . 是的,第一个链接使用顺序模型,但梯度磁带渐变得体 . 深入阅读热切的教程表明他们也只使用Gradient磁带 . 以下是教程中关于培训的内容:

    自动微分对于实现机器学习算法(例如用于训练神经网络的反向传播)非常有用 . 在急切执行期间,使用tfe.GradientTape跟踪稍后计算梯度的操作.tfe.GradientTape是一种选择加入功能,可在不跟踪时提供最大性能 . 由于在每次呼叫期间可能发生不同的操作,所有前向传递操作都被记录到“磁带” . 要计算渐变,请向后播放磁带然后丢弃 . 特定的tfe.GradientTape只能计算一次,后续调用会引发运行时错误 .

    所以也许现在只有Gradient磁带和估算器方法是你应该用的渴望 .

  • 1

    我在tensorflow上报道的问题得到了这样的答案:

    感谢您提供错误报告 . 我们已经解决了这个问题,很快就会出现在GitHub上 .

    请参阅GITHUB上针对Tensorflow的问题#18642 .

    基于此,我理解一旦错误得到修复,Keras模型的方法将受到热切执行的支持 .

相关问题