在Keras中自定义优化器与不自定义优化器有什么区别

时间:2019-06-27 21:44:39

标签: keras

我的问题是,如果我这样做,基本上Keras有什么区别

# first method

sgd = SGD(lr=0.001, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='binary_crossentropy',optimizer=sgd, metrics=['accuracy'])

或者简单地

# second method 

model.compile(loss='binary_crossentropy',optimizer='sgd', metrics=['accuracy'])

两者都编译良好,但是当我这样做的时候

model.fit(x_train, y_train, epochs=20, batch_size=4)

第一个导致

ValueError: Tensor("training/SGD/Variable:0", shape=(11, 11, 4, 96), 
dtype=float32_ref) must be from the same graph as Tensor("SGD/momentum/read:0", 
shape=(), dtype=float32).

在第二种方法中,我使用默认的“ sgd”优化器,网络可以正常训练。

该错误似乎表明2个张量不是来自同一张图,但我想这与导入的SGD有关吗?

我还在不同的模型上尝试了第一种方法,令人惊讶的是它不会导致错误。我认为它不应该依赖模型架构。

为什么会这样?

Keras版本:2.2.4
Python版本:3.6.5
TensorFlow版本:1.13.1

编辑

我不好,我有一个

tf.reset_default_graph()
with tf.Session() as test:
  ...

在我的代码中间

0 个答案:

没有答案