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. Magento 新增字段的值读写丢失原因

    某实体新增字段handreturn_status,欲操作之: $order_info = Mage::getModel('sales/order')->load($order_id); //se ...

  2. Stretch a row if data overflows in jasper reports

    My band stretches if necessary with the following conditions, I do not know yours. I have started wi ...

  3. css怎么引用某张图片?链接要怎么写

    总结一下 <a href="D:\xxx"> <img src="./xxx.jpg">

  4. adt-bundle-linux-x86_64-20131030下新建project提示找不到adb和R.java问题的解决

    adt-bundle-linux-x86_64-20131030下新建project提示找不到adb和R.java问题的解决 在ubuntu14.04下,搭建Android开发环境,下载官方的adt- ...

  5. 小学生之JAVA中的分层

    三层架构 三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL). 区分层次的目的即为了“高内聚,低 ...

  6. 关于c++primer的一个代码错误

    近期看c++primer第四版的标准容器vector.讲到对vector容器的插入删除元素会使得end()的迭代器失效的问题,所以不建议程序猿对end()的存储. vector<int> ...

  7. HTML5 RPG游戏引擎 地图实现篇

    一,话说全国年夜事   前没有暂看到lufy的专客上,有一名伴侣念要一个RPG游戏引擎,出于兴趣筹办入手做一做.因为我研讨lufylegend有冶时间了,对它有必然的依赖性,因而便筹办将那个引擎基于 ...

  8. PHP调用百度天气接口API

    //百度天气接口API $location = "北京"; //地区 $ak = "5slgyqGDENN7Sy7pw29IUvrZ"; //秘钥,需要申请,百 ...

  9. 钉钉接口:获取accessToken和打卡记录【分享】

    post和get方法工具类:HttpUtils package weaver.dingtalk.utils; import com.alibaba.fastjson.JSONObject; impor ...

  10. SLES 12 sp2开启SuSEfirewall2 防火墙后,放行VRRP协议 (用于keepalived搭建高可用规则)

    centos 6下面修改防火墙vi /etc/sysconfig/iptables 增加这个-A INPUT -p 112 -d 224.0.0.0/32 -j ACCEPT #-p 112指定协议为 ...