最近在做练习题的时候看到一个代码:

W_conv1 = weight_variable([5, 5, 1, 32])

这个是CNN中某一层的权重定义,然后就有点懵,所以在网上看了一下相关的帖子

对于shape来说可以定义多维度(二维以上)的张量,所以经常会出现这样的表述

那么这个[5, 5, 1, 32]应该怎么理解呢?

还是从一个简单的例子说起,

import tensorflow as tf
a = tf.constant([[1.,2.,3.],[4.,5.,6.],[7.,8.,9.]],shape = [3,3])
b = tf.initialize_all_variables()
 
with tf.Session() as sess:
    sess.run(b)
    print(sess.run(a))

运行结果是

[[ 1.  2.  3.]
 [ 4.  5.  6.]
 [ 7.  8.  9.]]

我们可以理解为:

shape[3, 3]的第一个“3”表示:“在第一个中括号以内存在3组元素”,

同理,则shape[3, 3]的第二个“3”表示:“在第二个中括号以内存在3组元素”。

由此我们可以知道[5, 5, 1, 32]这个结构首先是一个四维张量

其次在第一个维度中由五个元素组成

第三,这五个元素均是由五个子级元素组成

第四,五个子级元素中只有一个次级元素

最后,一个次级元素中包含了32个子元素

但从字面上理解比较抽象,这需要和神经网络的输入层元素个数进行联想,这里的数字都是每一层都是有特定具体含义的

 

然后说一下reshape中的-1参数

看到的代码如下

x_image = tf.reshape(x, [-1, 28, 28, 1])

其中的-1表示“目前我不确定”,所以在运行的时候程序先考虑后面的28,28和1

最后再看能组成什么样子

Emmmm,就这样!

参考:

https://blog.csdn.net/tkzc_csk/article/details/79332811

https://www.cnblogs.com/wasss/p/5439363.html

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐