1. tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding='SAME')  # 对数据进行卷积操作

参数说明:x表示输入数据,w表示卷积核, strides表示步长,分别表示为样本数,长,宽,通道数,padding表示补零操作

2. tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')  # 对数据进行池化操作

参数说明:x表示输入数据,ksize表示卷积的大小,分别表示卷积核的个数,长,框,通道数,padding表示补零操作

3. tf.nn.dropout(x, keep_prob) # 对全连接层做dropout操作

参数说明:x表示输入数据,keep_prob表示保留的比例,可以设置为0.5,

4. tf.nn.softmax_cross_entropy_with_logits(logits=scores, labels=y) # 用于构造交叉熵损失函数

参数说明:logits表示预测得分值,labels表示实际的标签值,表示是用One-hot编码的

5. tf.truncated_normal([28, 28, 1, 5], sttdv=0.1) # 生成数据和均值不大于标准差两倍的正态分布

参数说明:[28, 28, 1, 5]表示生成的为u的, sttdv表示标准差的大小

6.tf.nn.relu(x) # 进行激活操作

参数说明:x表示输入值

卷积神经网络:对于数据的输入,在tensorflow中,必须是[num_sample, width, height, C] num_sample表示样本的个数,width和height表示样本的宽和高,C表示样本的通道数,如果是黑白图,那么这里设置为1

对于卷积核的设置维度为[5, 5, 1, 64]  5和5表示的是样本的长和宽, 1表示卷积核的通道数,64表示卷积核的个数

代码:下面对mnist数据集使用卷积神经进行分类,两个卷积层,两个全连接层,卷积核使用的是5*5的,全连接层的隐藏层的个数为50

第一步:输入的读入

第二步:使用tf.nn.conv2d构造卷积函数,使用tf.nn.max_pool构造池化函数

第三步:设置超参数,即batch大小,迭代次数,分类的类别数,全连接隐藏层的个数

第四步:使用tf.placeholder设置输入的x和y, x = tf.placeholder(tf.float32, [None, 28, 28, 1])

第五步:设置卷积层的参数,为5*5*1*64的卷积,b为64的维度,使用conv2d进行卷积,使用tf.nn.relu 进行激活操作,使用max_pool进行池化操作

第六步:设置第二层卷积层的参数,为5*5*64*64,b为64的维度,进行卷积,激活,池化操作

第七步:设置全连接的参数,同时用tf.reshape([-1, 7*7*64]) 对上一层池化的结果进行维度的重构,用于进行全连接操作,使用tf.matmul进行点乘,并进行激活

第八步:构造keep_prob的输入参数,使用tf.nn.dropout构造对全连接层进行dropout操作,防止过拟合

第九步:设置最后一层全连接的参数,使用tf.matmul和激活函数

第十步:使用tf.nn.sotfmax构造损失softmax损失函数

第十一步:使用tf.train.Adaoptimzer()构造自适应的梯度优化器,对损失值进行优化

第十二步:使用tf.equal和tf.reduce_mean计算准确度

第十三步:进行循环,使用mnist.train.next_batch读取data和labels数据,并对data数据进行维度的重构,维度为[None, 28, 28, 1]进行卷积操作

第十四步:执行梯度优化,来更新参数

第十五步:如果迭代次数为100次,打印准确率和损失值

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.examples.tutorials.mnist import input_data # 第一步:数据集的读入
mnist = input_data.read_data_sets('/data', one_hot=True)
tf.reset_default_graph()
sess = tf.InteractiveSession()
# 第二步:构建卷积函数,使用tf.nn.conv2d(), 构造池化的函数, 使用tf.nn.max_pool()
def conv2d(x, W):
return tf.nn.conv2d(input=x, filter=W, strides=[1, 1, 1, 1], padding='SAME') def max_pool_2x2(x):
return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') # 第三步:设定超参数,batchsize的大小,分类的类别数,第一个全连接的数目
batchSize = 50
num_classes = 10
num_hidden = 50
trainIteration = 10000 # 第四步:使用tf.placeholder() 构造输入数据,实现数据的占位, X是一个num_data, 28, 28, 1,28和28表示维度, 1表示通道数
X = tf.placeholder('float', shape=[None, 28, 28, 1])
y_ = tf.placeholder('float', shape=[None, num_classes]) # 第五步:构造卷积层的参数,进行第一层卷积并使用relu激活函数,然后进行一次池化,压缩图片的维度
W_conv1 = tf.Variable(tf.truncated_normal([5, 5, 1, 32], stddev=0.1))
# 使用tf.constant(0.1, shape=[32])构造偏置项b
b_conv1 = tf.Variable(tf.constant(0.1, shape=[32]))
conv_h1 = tf.nn.relu(conv2d(X, W_conv1) + b_conv1)
pool_h1 = max_pool_2x2(conv_h1) # 第六步:构造第二层卷积的参数,进行卷积,tf.nn.relu激活, 然后使用池化压缩梯度
W_conv2 = tf.Variable(tf.truncated_normal([5, 5, 32, 64], stddev=0.1))
b_conv2 = tf.Variable(tf.constant(0.1, shape=[64]))
conv_h2 = tf.nn.relu(conv2d(pool_h1, W_conv2) + b_conv2)
pool_h2 = max_pool_2x2(conv_h2) # 第七步:构造第一层全连接的参数,需要将池化后的数据,进行一次拉长,即把维度变为N, 7*7&64,为了进行全连接操作
W_affine1 = tf.Variable(tf.truncated_normal([7*7*64, 1024], stddev=0.1))
b_affine1 = tf.Variable(tf.constant(0.1, shape=[1024]))
affine_x = tf.reshape(pool_h2, [-1, 7*7*64])
affine_1 = tf.nn.relu(tf.matmul(affine_x, W_affine1)+b_affine1) # 第八步:构造输入数据keep_prob,使用tf.nn.dropout进行全连接的dropout操作
keep_prob = tf.placeholder('float')
affine_1_drop = tf.nn.dropout(affine_1, keep_prob)
# 第九步:构造初始化参数,使用tf.matmul构造全连接第二层
W_affine2 = tf.Variable(tf.truncated_normal([1024, num_classes], stddev=0.1))
b_affine2 = tf.Variable(tf.constant(0.1, shape=[num_classes]))
scores = tf.matmul(affine_1_drop, W_affine2) + b_affine2 # 第十步:使用softmax构造损失值函数
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=scores))
# 第十一步:使用自适应梯度下降生成损失值的优化器
opt = tf.train.AdamOptimizer().minimize(loss)
# 第十二步:使用tf.equal判断最大值的索引位置是否相同,使用tf.reduce_mean 判断计算准确率
correct = tf.equal(tf.argmax(scores, 1), tf.argmax(y_, 1))
accr = tf.reduce_mean(tf.cast(correct, 'float')) init = tf.global_variables_initializer()
sess.run(init) for i in range(trainIteration):
# 第十三步:获得batch的数据,对输入的data数据进行维度的变换
batch = mnist.train.next_batch(batchSize)
trainInput = batch[0].reshape([batchSize, 28, 28, 1])
trainLabel = batch[1]
# 第十四步:执行梯度优化的操作,用来更新参数
sess.run(opt, feed_dict={X:trainInput, y_: trainLabel, keep_prob:0.8})
# 第十五步:每迭代一百次,就打印一个batchSize的准确率
if i % 100 == 0:
print('accr :%g'%(sess.run(accr, feed_dict={X: trainInput, y_: trainLabel, keep_prob:1.0})))

深度学习原理与框架-Tensorflow卷积神经网络-卷积神经网络mnist分类 1.tf.nn.conv2d(卷积操作) 2.tf.nn.max_pool(最大池化操作) 3.tf.nn.dropout(执行dropout操作) 4.tf.nn.softmax_cross_entropy_with_logits(交叉熵损失) 5.tf.truncated_normal(两个标准差内的正态分布)的更多相关文章

  1. 深度学习原理与框架-Tensorflow卷积神经网络-cifar10图片分类(代码) 1.tf.nn.lrn(局部响应归一化操作) 2.random.sample(在列表中随机选值) 3.tf.one_hot(对标签进行one_hot编码)

    1.tf.nn.lrn(pool_h1, 4, bias=1.0, alpha=0.001/9.0, beta=0.75) # 局部响应归一化,使用相同位置的前后的filter进行响应归一化操作 参数 ...

  2. 深度学习原理与框架-Tensorflow卷积神经网络-神经网络mnist分类

    使用tensorflow构造神经网络用来进行mnist数据集的分类 相比与上一节讲到的逻辑回归,神经网络比逻辑回归多了隐藏层,同时在每一个线性变化后添加了relu作为激活函数, 神经网络使用的损失值为 ...

  3. 深度学习原理与框架-Tensorflow基本操作-mnist数据集的逻辑回归 1.tf.matmul(点乘操作) 2.tf.equal(对应位置是否相等) 3.tf.cast(将布尔类型转换为数值类型) 4.tf.argmax(返回最大值的索引) 5.tf.nn.softmax(计算softmax概率值) 6.tf.train.GradientDescentOptimizer(损失值梯度下降器)

    1. tf.matmul(X, w) # 进行点乘操作 参数说明:X,w都表示输入的数据, 2.tf.equal(x, y) # 比较两个数据对应位置的数是否相等,返回值为True,或者False 参 ...

  4. 深度学习原理与框架-Tensorflow基本操作-实现线性拟合

    代码:使用tensorflow进行数据点的线性拟合操作 第一步:使用np.random.normal生成正态分布的数据 第二步:将数据分为X_data 和 y_data 第三步:对参数W和b, 使用t ...

  5. 深度学习原理与框架-Tensorflow基本操作-变量常用操作 1.tf.random_normal(生成正态分布随机数) 2.tf.random_shuffle(进行洗牌操作) 3. tf.assign(赋值操作) 4.tf.convert_to_tensor(转换为tensor类型) 5.tf.add(相加操作) tf.divide(相乘操作) 6.tf.placeholder(输入数据占位

    1. 使用tf.random_normal([2, 3], mean=-1, stddev=4) 创建一个正态分布的随机数 参数说明:[2, 3]表示随机数的维度,mean表示平均值,stddev表示 ...

  6. 深度学习原理与框架-Tensorflow基本操作-Tensorflow中的变量

    1.tf.Variable([[1, 2]])  # 创建一个变量 参数说明:[[1, 2]] 表示输入的数据,为一行二列的数据 2.tf.global_variables_initializer() ...

  7. 深度学习原理与框架-图像补全(原理与代码) 1.tf.nn.moments(求平均值和标准差) 2.tf.control_dependencies(先执行内部操作) 3.tf.cond(判别执行前或后函数) 4.tf.nn.atrous_conv2d 5.tf.nn.conv2d_transpose(反卷积) 7.tf.train.get_checkpoint_state(判断sess是否存在

    1. tf.nn.moments(x, axes=[0, 1, 2])  # 对前三个维度求平均值和标准差,结果为最后一个维度,即对每个feature_map求平均值和标准差 参数说明:x为输入的fe ...

  8. 深度学习原理与框架-猫狗图像识别-卷积神经网络(代码) 1.cv2.resize(图片压缩) 2..get_shape()[1:4].num_elements(获得最后三维度之和) 3.saver.save(训练参数的保存) 4.tf.train.import_meta_graph(加载模型结构) 5.saver.restore(训练参数载入)

    1.cv2.resize(image, (image_size, image_size), 0, 0, cv2.INTER_LINEAR) 参数说明:image表示输入图片,image_size表示变 ...

  9. 深度学习原理与框架-CNN在文本分类的应用 1.tf.nn.embedding_lookup(根据索引数据从数据中取出数据) 2.saver.restore(加载sess参数)

    1. tf.nn.embedding_lookup(W, X) W的维度为[len(vocabulary_list), 128], X的维度为[?, 8],组合后的维度为[?, 8, 128] 代码说 ...

随机推荐

  1. 认识hasLayout——IE浏览器css bug的一大罪恶根源

     原文地址:http://neverned.blog.163.com/blog/static/1265524200933021130561/   什么是hasLayout?hasLayout是IE特有 ...

  2. Oracle EXP-00091解决方法

    非交互式 windows: D:\>exp scott/tiger file=employee.dmp tables=(emp,dept) linux需要加双引号 EXP-00091: [ora ...

  3. []map[][]切片map小计

    go中的map我们都知道在进行遍历的时候我们知道他是无序的.对于map[int]interface{}类型的,我们可以通过计算map的长度,通过定长的for循环,进行顺序的输出. 那么如果map的类型 ...

  4. [UE4]国际化,中英文切换

    只有“Text”数据类型才支持国际化 必须以独立游戏窗口运行,语音切换才会起作用.

  5. http、TCP/IP协议与socket之间的区别(转载)

    http.TCP/IP协议与socket之间的区别  https://www.cnblogs.com/iOS-mt/p/4264675.html http.TCP/IP协议与socket之间的区别   ...

  6. c#day03

    c#中的随机数 Random random = new Random(); //随机1~200之间的一个数 random.Next(,); //怪兽:防御为10,血量为10 //玩家:随机8~12的攻 ...

  7. 解决在word中不能使用输入法

    打开一个Word文档-------------->单击 文件---->选项---->高级---->取消什么?看图 然后重新启动word

  8. IDEA非sbt下spark开发

    创建非sbt的scala项目 引入spark的jar包 File->Project Structure->Libararies引用spark-assembly-1.5.2-hadoop2. ...

  9. 二、Html5元素、属性、格式化

  10. git创建远程项目并进行代码管理及相关命令

    1.windows下载Git     https://git-scm.com/downloads 然后一路点击安装 2.登录github,点击右上角创建仓库 3.在本地项目根目录下 输入如下命令 ss ...