我正在尝试运行这段代码:
def somefunc(x, rows, n_hidden):
vectors = tf.contrib.layers.embed_sequence(nodes, vocab_size=vocab_size, embed_dim=n_hidden)
batch_size = tf.shape(vectors)[0]
state = tf.zeros([batch_size, rows, n_hidden])
bias = tf.Variable(tf.constant(0.1, shape=[batch_size,1]) # Error here!
...
x = tf.placeholder(tf.int32, shape=[None, 200])
pred = somefunc(x, 200, 40)
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=target))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss)
调用函数时出现此错误(错误是偏置形状):
TypeError:int()参数必须是字符串,类似字节的对象或数字,而不是'Tensor'
我尝试b = tf.Variable(0.1, validate_shape=False)
,但后来我在optimizer
收到了此错误:
ValueError:未在未知的TensorShape上定义as_list()。
如果我删除validate_shape=False
,则会出现形状错误。
如果我忽略了一些显而易见的事情,我很抱歉,但有人可以告诉我哪里出错了吗?
非常感谢!
答案 0 :(得分:2)
tf.constant()
op的shape
参数需要静态形状,因此您无法使用tf.Tensor
作为参数的一部分。
幸运的是,还有另一个操作就足够了:tf.fill()
,它允许形状(dims
参数)为tf.Tensor
。这意味着您可以将bias
定义为:
bias = tf.Variable(tf.fill(dims=[batch_size, 1], 0.1), validate_shape=False)