具有Tensorflow后端的Keras的K.function方法是否适用于网络层?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有Tensorflow后端的Keras的K.function方法是否适用于网络层?相关的知识,希望对你有一定的参考价值。
我最近开始使用Keras构建神经网络。我构建了一个简单的CNN来对MNIST数据集进行分类。在学习模型之前,我使用K.set_image_dim_ordering('th')
来绘制卷积层权重。现在我试图用K.function
方法可视化卷积层输出,但我不断收到错误。
这是我现在想做的事情:
input_image = X_train[2:3,:,:,:]
output_layer = model.layers[1].output
input_layer = model.layers[0].input
output_fn = K.function(input_layer, output_layer)
output_image = output_fn.predict(input_image)
print(output_image.shape)
output_image = np.rollaxis(np.rollaxis(output_image, 3, 1), 3, 1)
print(output_image.shape)
fig = plt.figure()
for i in range(32):
ax = fig.add_subplot(4,8,i+1)
im = ax.imshow(output_image[0,:,:,i], cmap="Greys")
plt.xticks(np.array([]))
plt.yticks(np.array([]))
fig.subplots_adjust(right=0.8)
cbar_ax = fig.add_axes([1, 0.1, 0.05 ,0.8])
fig.colorbar(im, cax = cbar_ax)
plt.tight_layout()
plt.show()
这就是我得到的:
File "/home/kinshiryuu/anaconda3/lib/python3.5/site-packages/keras/backend/tensorflow_backend.py", line 1621, in function
return Function(inputs, outputs, updates=updates)
File "/home/kinshiryuu/anaconda3/lib/python3.5/site-packages/keras/backend/tensorflow_backend.py", line 1569, in __init__
raise TypeError('`inputs` to a TensorFlow backend function '
TypeError: `inputs` to a TensorFlow backend function should be a list or tuple.
您应该进行以下更改:
output_fn = K.function([input_layer], [output_layer])
output_image = output_fn([input_image])
K.function
将输入和输出张量作为列表,以便您可以创建从许多输入到多个输出的函数。在你的情况下,一个输入到一个输出..但你需要将它们作为列表传递给你。
接下来K.function
返回张量函数,而不是模型对象,您可以使用predict()
。正确的使用方法就是作为一个函数调用
我想你也可以用K.function来获得渐变。
self.action_gradients = K.gradients(Q_values, actions)
self.get_action_gradients=K.function[*self.model.input, K.learning_phase()], outputs=action_gradients)
其基本上运行图形以获得Q值以计算Q值的梯度w.r.t. DDPG中的动作矢量。源代码在这里(第64到70行):https://github.com/nyck33/autonomous_quadcopter/blob/master/criticSolution.py#L65
根据已接受的答案和这里的用法(最初来自Udacity Deep Learning nanodegree中的项目5自主四轴飞行器),我仍然会想到一个问题,即。是K.function()
可以相当灵活地运用图表并指定为K.function()
的输出,例如特定图层的输出,渐变甚至权重本身?
这里有64到67行:https://github.com/nyck33/autonomous_quadcopter/blob/master/actorSolution.py
它被用作DDPG中演员网络的自定义训练功能:
#caller
self.actor_local.train_fn([states, action_gradients, 1])
#called
self.train_fn = K.function(inputs=[self.model.input, action_gradients, K.learning_phase()],
outputs=[], updates=updates_op)
outputs
被赋予一个空列表的值,因为我们只想用来自评论家网络的action_gradients训练演员网络。
以上是关于具有Tensorflow后端的Keras的K.function方法是否适用于网络层?的主要内容,如果未能解决你的问题,请参考以下文章
使用Tensorflow后端的Keras LSTM RNN中令人费解的训练损失与纪元...行为的任何原因
带有 TensorFlow 后端的 Keras 不使用 GPU