关于tensorflow 中 placeholder 与 reshape的一点坑

转自:https://blog.csdn.net/sky_asher/article/details/79717620

在搭LeNet-5 模型时,在卷积层的输出到全连接层时,使用了reshape将四维的矩阵转化维2维矩阵时,发生了错误:

 
这里写图片描述
起初以为时类型转换发生了错误,然后演算过后发现并没有错误。然后改了下 训练数据的输入格式

 

    # 定义输入输出placeholder, **修改前**
    x = tf.placeholder(tf.float32,
                       [None,
                        mnist_inference.IMAGE_SIZE,
                        mnist_inference.IMAGE_SIZE,
                        mnist_inference.NUM_CHANNELS],
                       name='x-input')
 # 定义输入输出placeholder。**修改后**
    x = tf.placeholder(tf.float32,
                       [BATCH_SIZE,
                        mnist_inference.IMAGE_SIZE,
                        mnist_inference.IMAGE_SIZE,
                        mnist_inference.NUM_CHANNELS],
                       name='x-input')
然后错误没有了,写了一个简单的验证程序,来验针下placeholder这里出现的问题。
import tensorflow as tf
import numpy as np

x = tf.placeholder(tf.float32, [None,2,2,2],name='x-input')
x_shape = x.get_shape().as_list()
len = x_shape[1] * x_shape[2] * x_shape[3]
x_reshaped = tf.reshape(x, [x_shape[0],len])

y = x_reshaped + 1
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    data = np.arange(2 * 2 * 2 * 2).reshape([2, 2, 2, 2]).astype('float32')
    out = sess.run(y, feed_dict={x:data})
    print(out)

然后发生了如下错误,通过黄色标注的字体可以发现时发生在了reshape是发生了错误,reshape()函数无法识别None这里发生的转换,所以报错。 

所以问题出现在reshape函数这块reshap() 函数无法识别转化列表中的None是多少,这时可以使用python中的自动推导,也就是

# x_reshaped = tf.reshape(x, [x[0], len])
x_reshaped = tf.reshape(x, [-1,len])

这样完美解决问题,placeholder的shape参数可以为

x = tf.placeholder(tf.float32,
                       [None,
                        mnist_inference.IMAGE_SIZE,
                        mnist_inference.IMAGE_SIZE,
                        mnist_inference.NUM_CHANNELS],
                       name='x-input')

这样就可以训练和测试一起执行,根据需要输入Bach的大小

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值