首页 > 解决方案 > tensorflow.nn.conv1d 有渐变吗?

问题描述

我试着像这样get_gradient_function()使用tensorflow.nn.conv1d

import tensorflow as tf
from tensorflow.python.framework.ops import get_gradient_function

d = tf.constant([1, 0, 2, 3, 0, 1, 1], dtype=tf.float32, name='d')
k = tf.constant([2, 1, 3], dtype=tf.float32, name='k')

data = tf.reshape(d, [1, int(d.shape[0]), 1], name='data')
kernel = tf.reshape(k, [int(k.shape[0]), 1, 1], name='kernel')

conv = tf.nn.conv1d(data, kernel, 1, 'SAME', name='conv')

with tf.Session() as sess:
    print (sess.run(conv))

op = tf.get_default_graph().get_operation_by_name('conv')
print(get_gradient_function(op))

我在倒数第二行收到以下错误。

KeyError:“名称 'conv' 指的是不在图中的操作。”

标签: pythonpython-3.xtensorflow

解决方案


图中似乎没有'conv',您可以通过tf.get_default_graph().get_operaions()如下所示打印所有操作

d
k
data/shape
data
kernel/shape
kernel
conv/ExpandDims/dim
conv/ExpandDims
conv/ExpandDims_1/dim
conv/ExpandDims_1
conv/Conv2D
conv/Squeeze

conv.op.name打印conv/Squeeze。所以name=conv只是给出外部名称。

这样,op = tf.get_default_graph().get_operation_by_name('conv/Squeeze')将工作


推荐阅读