【发布时间】:2018-11-15 02:29:29
【问题描述】:
model = keras.Sequential([ #my model, trained on Fashion_MNIST
keras.layers.Conv2D(32, (3,3), activation=tf.nn.relu, input_shape=(28,28,1)),
keras.layers.MaxPooling2D(),
keras.layers.Conv2D(64, (3,3), activation=tf.nn.relu),
keras.layers.MaxPooling2D(),
keras.layers.Flatten(),
keras.layers.Dense(1000, activation='relu'),
keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.load_weights('./weights/235model') #load weights
model.compile(optimizer=tf.train.AdamOptimizer(),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
tmp = np.full((10,1),0.0) #get correct label
tmp[test_labels[0]] = 1.0
y_tensor=tf.convert_to_tensor(tmp)
loss = keras.losses.sparse_categorical_crossentropy(model.output, y_tensor)
gradients = keras.backend.gradients(loss, model.input)
print(gradients)
我正在做一个迭代 FGSM 攻击,所以我需要获取损失相对于输入的梯度,但是当我打印梯度时,它显示 [None] 而不是有效的张量。
稍后我运行它,
with keras.backend.get_session() as sess:
evaluated_gradients = sess.run(gradients, feed_dict={model.input:np.reshape(test_images[0],(1,28,28,1))})
它给了我错误 /.local/lib/python2.7/site-packages/tensorflow/python/client/session.py”,第 258 行,在 for_fetch 类型(获取))) TypeError: Fetch 参数 None 的类型无效
如果我在设置梯度时将损失更改为 model.output,它可以正常工作,但如果我在那里使用交叉熵损失,它就不起作用,有人可以帮助我吗?我是 keras 和 tensorflow 的初学者。
【问题讨论】:
标签: python tensorflow keras