Tensorflow获取tensor具体数据及InvalidArgumentError: Shape [-1,2186] has negative dimensions错误

(作者:陈玓玏)

一、查看tensor具体数据

在使用tensorflow训练模型的过程中,想要查看某些变量的具体内容,以便更好地掌握训练过程,但是tensorflow的变量都是tensor对象,而直接查看tensor对象只能看到其shape信息和数据类型信息,看不到具体的信息。

想要查看具体数据,需要通过session,代码如下:

#引入tensorflow
import tensorflow as tf

#定义一个变量x并赋值为常数10
x = tf.constant(10)

#开启一个会话,在会话中执行graph,这里的graph中只包含x的赋值操作
with tf.Session() as sess:
    #方法一:通过session.run获取数据
    print(sess.run(x))
    #方法二:通过eval函数获取数据
    print(x.eval())

二、InvalidArgumentError: Shape [-1,2186] has negative dimensions错误

上面的例子中,x是一个常数,是一个已经有确切赋值的函数,但有时并不是这种情况,比如建模过程中,样本特征x只是一个占位符,而非具体数值,那么你想要通过sess.run(y)获取y的具体数值就会报这个错,因为x值并没有输入。错误场景如下:

    #引入tensorflow
    import tensorflow as tf
    
    #定义占位符x,以便之后传入任意条样本数据,每条样本784个特征,定义权重为w,shape为[784,10]
    #服从截尾高斯分布,标准差为0.1,y为矩阵x和矩阵y的乘积,shape为[样本条数,10]
    x = tf.placeholder(tf.float32,[None, 784])
    w = tf.truncated_normal([784,10], stddev=0.1)
    y = x*w
  
    #开启一个会话,在会话中执行graph,这里的graph中包含y的计算公式
    with tf.Session() as sess:
        tf.global_variables_initializer().run()
        print(sess.run(y))

使用上述代码获取y时,就会出现以上的错误。

解决方案:
通过sess.run(y)获取y时,需要指定数据x的来源,否则x只是个占位符,没有实际数据,自然计算不出y值。应该把print(sess.run(y))改为print(sess.run(y,{x:input})),这里假设input是我们获取的具体的样本数据,{x:input}参数名实际叫feed_dict,是把具体数据喂给模型,而sess.run执行的是fetch操作,是把数据取出来。通过指定feed_dict,问题解决。

参考资料:

https://blog.csdn.net/jningwei/article/details/73557938

你可能感兴趣的:(深度学习)