【问题标题】:Tensorflow : TypeError: 'TensorShape' object is not callableTensorflow:TypeError:“TensorShape”对象不可调用
【发布时间】:2018-06-18 16:39:32
【问题描述】:

我有一个简单的占位符:

input_x = tf.placeholder(name='tensor_a',shape=[2,3,4],dtype=tf.int32)

我想获取形状索引并在变量中使用它作为参数,例如:

var_b = tf.get_variable('name_a',shape=[input_x.get_shape()[0],2],dtype=tf.float32,initializer=tf.random_uniform_initializer())

var_c = tf.get_variable('name_b',shape=[input_x.get_shape()[1],2],dtype=tf.float32,initializer=tf.random_uniform_initializer())

完整的程序:

import tensorflow as tf
import numpy as np

tf.reset_default_graph()

input_x = tf.placeholder(name='tensor_a',shape=[2,3,4],dtype=tf.int32)

var_b = tf.get_variable('name_a',shape=[input_x.get_shape()[0],2],dtype=tf.float32,initializer=tf.random_uniform_initializer())
var_c = tf.get_variable('name_b',shape=[input_x.get_shape()[1],2],dtype=tf.float32,initializer=tf.random_uniform_initializer())

sum_c=tf.add(var_b,var_c)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(sum_c,feed_dict={input_x:np.random.randint(0,10,[2,3,4])}))

但我收到此错误:

TypeError: 'TensorShape' object is not callable

我怎样才能做到这一点?

编辑:如果我试图重塑它,我会收到另一个错误:

import tensorflow as tf
import numpy as np

tf.reset_default_graph()

input_x = tf.placeholder(name='tensor_a',shape=[None,None],dtype=tf.int32)
print(input_x.get_shape())

var_b = tf.get_variable('name_a',shape=[4,4],dtype=tf.float32,initializer=tf.random_uniform_initializer())
var_c = tf.get_variable('name_b',shape=[4,4],dtype=tf.float32,initializer=tf.random_uniform_initializer())
vac_d= tf.get_variable('name_d',shape=[var_c.shape[0],60],dtype=tf.float32,initializer=tf.random_uniform_initializer())
reshape_ = tf.reshape(var_c,[input_x.shape[0],input_x.shape[1],-1])
print(reshape_)
sum_c=tf.add(var_b,var_c)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(sum_c,feed_dict={input_x:np.random.randint(0,10,[2,2])}))

错误:

TypeError: Failed to convert object of type <class 'list'> to Tensor. Contents: [Dimension(None), Dimension(None), -1]. Consider casting elements to a supported type.

【问题讨论】:

  • numpy 和可能的tensorflow 中,shape 是一个属性,而不是一个方法。所以把()放在它产生这个错误之后:input_x.shape()

标签: python python-3.x numpy tensorflow


【解决方案1】:

改变

var_b = tf.get_variable('name_a',shape=[input_x.shape()[0],2],dtype=tf.float32,initializer=tf.random_uniform_initializer())
var_c = tf.get_variable('name_b',shape=[input_x.shape()[1],2],dtype=tf.float32,initializer=tf.random_uniform_initializer())

var_b = tf.get_variable('name_a',shape=[input_x.shape[0],2],dtype=tf.float32,initializer=tf.random_uniform_initializer())
var_c = tf.get_variable('name_b',shape=[input_x.shape[1],2],dtype=tf.float32,initializer=tf.random_uniform_initializer())

【讨论】:

  • 如果输入占位符是 [None,None] 我会收到错误消息,有什么方法可以解决这个问题,请参阅有问题的编辑?
  • 使用tf.shape(input_x)[0] 而不是input_x.shape()[0]
猜你喜欢
  • 2021-12-15
  • 2018-10-01
  • 2021-08-21
  • 2018-09-30
  • 2021-02-18
  • 1970-01-01
  • 2016-10-01
  • 2015-01-29
  • 2014-03-17
相关资源
最近更新 更多