今天学习学习手写识别过程中,突然想对reshape函数深入了解。
原因是tensorflow在建立占位符x = tf.placeholder(tf.float32,[None,784])之后,为什么进过reshape之后,能够显示图像,猜想reshape函数肯定是对每一行进行reshape。
猜想如下:
假设x.shape=(16,9),经过y=tf.reshape(x,[-1,3,3,1])之后,肯定是y.shape(16,3,3,1),然后将16个batch中的3*3*1图像进行显示。
代码如下:
import tensorflow as tf
v7_1 = tf.range(1, 17, 1)#just int32
v7 = tf.reshape(v7_1,[16,1])
multi = tf.tile(v7, multiples=[ 1, 9])#扩充成16*9
print(sess.run(multi))
v7 = tf.reshape(multi,[-1,3,3,1])
print(sess.run(v7))
结果如下:
#multi
[[ 1 1 1 1 1 1 1 1 1]
[ 2 2 2 2 2 2 2 2 2]
[ 3 3 3 3 3 3 3 3 3]
[ 4 4 4 4 4 4 4 4 4]
[ 5 5 5 5 5 5 5 5 5]
[ 6 6 6 6 6 6 6 6 6]
[ 7 7 7 7 7 7 7 7 7]
[ 8 8 8 8 8 8 8 8 8]
[ 9 9 9 9 9 9 9 9 9]
[10 10 10 10 10 10 10 10 10]
[11 11 11 11 11 11 11 11 11]
[12 12 12 12 12 12 12 12 12]
[13 13 13 13 13 13 13 13 13]
[14 14 14 14 14 14 14 14 14]
[15 15 15 15 15 15 15 15 15]
[16 16 16 16 16 16 16 16 16]]
#v7
[[[[ 1]
[ 1]
[ 1]]
[[ 1]
[ 1]
[ 1]]
[[ 1]
[ 1]
[ 1]]]
[[[ 2]
[ 2]
[ 2]]
[[ 2]
[ 2]
[ 2]]
[[ 2]
[ 2]
[ 2]]]
[[[ 3]
[ 3]
[ 3]]
[[ 3]
[ 3]
[ 3]]
[[ 3]
[ 3]
[ 3]]]
[[[ 4]
[ 4]
[ 4]]
[[ 4]
[ 4]
[ 4]]
[[ 4]
[ 4]
[ 4]]]
[[[ 5]
[ 5]
[ 5]]
[[ 5]
[ 5]
[ 5]]
[[ 5]
[ 5]
[ 5]]]
[[[ 6]
[ 6]
[ 6]]
[[ 6]
[ 6]
[ 6]]
[[ 6]
[ 6]
[ 6]]]
[[[ 7]
[ 7]
[ 7]]
[[ 7]
[ 7]
[ 7]]
[[ 7]
[ 7]
[ 7]]]
[[[ 8]
[ 8]
[ 8]]
[[ 8]
[ 8]
[ 8]]
[[ 8]
[ 8]
[ 8]]]
[[[ 9]
[ 9]
[ 9]]
[[ 9]
[ 9]
[ 9]]
[[ 9]
[ 9]
[ 9]]]
[[[10]
[10]
[10]]
[[10]
[10]
[10]]
[[10]
[10]
[10]]]
[[[11]
[11]
[11]]
[[11]
[11]
[11]]
[[11]
[11]
[11]]]
[[[12]
[12]
[12]]
[[12]
[12]
[12]]
[[12]
[12]
[12]]]
[[[13]
[13]
[13]]
[[13]
[13]
[13]]
[[13]
[13]
[13]]]
[[[14]
[14]
[14]]
[[14]
[14]
[14]]
[[14]
[14]
[14]]]
[[[15]
[15]
[15]]
[[15]
[15]
[15]]
[[15]
[15]
[15]]]
[[[16]
[16]
[16]]
[[16]
[16]
[16]]
[[16]
[16]
[16]]]]
v7.shape=(16,3,3,1)