卷积与池化:
卷积:
1.stride [1,2,2,1] 卷积步长为2, 第1\4参数为1.分别表示batch和channel
VALID:without padding(仅丢弃下面或右边最多的行/列)
SAME:with zero padding 左奇右偶,在左边补一个0,右边补2个0
weight_variable:
# 第一二参数值得卷积核尺寸大小,即patch=5*5,第三个参数是图像通道数=1,第四个参数是卷积核的数目=32,代表会出现多少个卷积特征图像;
W_conv1 = weight_variable([5, 5, 1, 32])
# 对于每一个卷积核都有一个对应的偏置量。
b_conv1 = bias_variable([32])
# 图片乘以卷积核,并加上偏执量,卷积结果28x28x32
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
池化:
ksize [1,2,2,1] 池化窗口大小2*2 第1\4参数为1.
# 池化结果14x14x32 卷积结果乘以池化卷积核
h_pool1 = max_pool_2x2(h_conv1)
## 第二层卷积操作 ##
# 32通道卷积,卷积出64个特征
w_conv2 = weight_variable([5,5,32,64])
# 64个偏执数据
b_conv2 = bias_variable([64])
# 注意h_pool1是上一层的池化结果,#卷积结果14x14x64
h_conv2 = tf.nn.relu(conv2d(h_pool1,w_conv2)+b_conv2)
全连接层:
# 二维张量,第一个参数7*7*64的patch,也可以认为是只有一行7*7*64个数据的卷积,第二个参数代表卷积个数共1024个
W_fc1 = weight_variable([7*7*64, 1024])
# 1024个偏置数据
b_fc1 = bias_variable([1024])
tf.cats:转换数据类型
tf.round() 舍入最近的整数
tf.reduce_sum(x,1/0):按某一维度以求和方式降维 0纵向求和,1横向求和,不填默认为所有元素求和
tf.reduce_mean(x,1/0):按某一维度以求和方式降维 同上
np.shuffle(a):对矩阵进行洗牌,原矩阵改变.无返回值
定义初始化变量。但是这里仍然不会立即执行。需要通过sess来将数据流动起来 。
切记:所有的运算都应在在session中进行:
with tf.Session() as sess:
此处自动开启一个sessionsess.run(init)
对变量进行初始化,执行(run)init语句
feed_dict:
step_loss = sess.run([loss], feed_dict={X: train_X, Y: train_Y})#feed_dict的作用是给使用placeholder创建出来的tensor赋值。其实,他的作用更加广泛:feed 使用一个 值临时替换一个 op 的输出结果. 你可以提供 feed 数据作为 run() 调用的参数. feed 只在调用它的方法内有效, 方法结束, feed 就会消失.train_X替换X,train_Y替换Y
sess.run(b)只会计算和b有关的流程
其他:
1、dropout必须设置概率keep_prob,并且keep_prob也是一个占位符,跟输入是一样的
keep_prob = tf.placeholder(tf.float32) 设置神经元被选中的概率,在初始化时keep_prob是一个占位符