续(利用tensorflow实现简单的卷积神经网络-对代码中相关函数介绍)——迁移学习小记(三)

  上篇文章对cnn进行了一些介绍,附了完整小例子代码,介绍了一部分函数概念,但是对我这样的新手来说,代码中涉及的部分函数还是无法一下子全部理解。于是在本文中将对代码中使用的函数继续进行一一介绍。

具体代码见上一篇(二)

一、

#定义输入的placehoder,x是特征,y_是真实的label。因为卷积神经网络会用到2D的空间信息,所以需要把784维数据恢复成28*28结构,使用的是tf.shape函数
x = tf.placeholder(tf.float32, [None, 784])
y_ = tf.placeholder(tf.float32, [None, 10])
x_image = tf.reshape(x, [-1, 28, 28, 1])

1.1 tf.placeholder(dtype,shape=None,name=None)

placeholder,占位符,在tensoflow中类似于函数参数,运行时必须传入值。

dtype:数据类型。常用的是tf.float32,tf.float64等数值类型。

shape:数据形状。默认是None,就是一维值,也可以是多维,比如[2,3],[None,3]表示列是3,行不定。

name:名称

1.2 tf.reshape(tensor,shape,name=None)

在处理图像时总会遇到输入图像的维数不符合的情况,此时tensorflow中reshape()就很好的解决了这个问题。

函数的作用是将tensor变换为参数shape形式,其中shape为一个列表形式,特殊的列表可以实现逆序的遍历,即list(-1)。-1代表的含义是我们不需要亲自去指定这一维的大小,函数自动计算,但是列表中只能存在一个-1.

二、

#定义第一个卷积层
W_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32])
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_2_2(h_conv1)

2.1 tf.nn.relu()

该函数让大于0的数保持不变,小于0的数置为0

2.2 tf.nn.max_pool(value,ksize,strides,padding,name=None)

max_pool是CNN中最大值池化操作

value:需要池化的输入,一般池化曾接在卷积层后面,所以通常输入是feature map,依然是[batch,height,width,channels]这样的shape

ksize:池化窗口的大小,取一个四维向量,一般是[1,height,width,1],因为我们不想在batch和channels上做池化,所以这两个维度设置为1

strides:和卷积类似,窗口在每一个维度上滑动的步长,一般也是[1,stride,stride,1]

padding:和卷积类似,可以取‘VALID' 或者’SAME‘

返回一个Tensor,类型不变,shape仍然是[batch,height,width,channels]这种形式

三、

#定义损失函数和训练的步骤,用adam优化器最小化损失函数
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y_conv), reduction_indices = [1]))
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)

3.1 reduce_mean(input_tensor,reduction_indices=None,keep_dims=False,name=None)

用于求平均值

input_tensor:带求值的tensor

reduction_indices:在哪一维上求解

参数(3),(4)可忽略

四、

#计算预测的精确度
correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

4.1 tf.argmax(input,axis=None,name=None,dimension=None)

对矩阵按行或者列计算最大值

input:输入值

axis:可选值0表示按列,1表示按行求最大值

name:名字

4.2 tf.equal(A,B)是对比这两个矩阵或者向量的相等的元素,如果相等就返回True,否则返回False,返回值的矩阵维度与A相同

4.3 tf.cast(x,dtype,name=None) 类型转换函数

将x的数据转化成dtype

猜你喜欢

转载自blog.csdn.net/gyx1549624673/article/details/82823583