tensorflow多层CNN代码分析
- tf,reshape(tensor,shape,name=None)
- #其中shape为一个列表形式,特殊的一点是列表中可以存在-1。-1代表的含义是不用我们自己#指定这一维的大小,函数会自动计算,但列表中只能存在一个-1。
- #思想:将矩阵t变为一维矩阵,然后再对矩阵的形式更改
2.
- c = tf.truncated_normal(shape=[10,10], mean=0, stddev=1)
- #shape表示生成张量的维度,mean是均值,stddev是标准差,产生正态分布
- #这个函数产生的随机数与均值的差距不会超过标准差的两倍
3.
- from __future__ import absolute_import
- from __future__ import division
- from __future__ import print_function
- import tensorflow as tf
- import numpy as np
- import math
- import gzip
- import os
- import tempfile
- from tensorflow.examples.tutorials.mnist import input_data
- flags = tf.app.flags
- FLAGS = flags.FLAGS
- flags.DEFINE_string('data_dir', '/Users/guoym/Desktop/models-master', 'Directory for storing data')
- mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True)
- x = tf.placeholder(tf.float32, [None, 784]) # 占位符
- x_image=tf.reshape(x,[-1,28,28,1])
- sess=tf.InteractiveSession()
- # 第一层
- # 卷积核(filter)的尺寸是5*5, 通道数为1,输出通道为32,即feature map 数目为32
- # 又因为strides=[1,1,1,1] 所以单个通道的输出尺寸应该跟输入图像一样。即总的卷积输出应该为?*28*28*32
- # 也就是单个通道输出为28*28,共有32个通道,共有?个批次
- # 在池化阶段,ksize=[1,2,2,1] 那么卷积结果经过池化以后的结果,其尺寸应该是?*14*14*32
- def weight_variable(shape):
- initial=tf.truncated_normal(shape,stddev=0.1)
- return tf.Variable(initial)
- def bias_variable(shape):
- initial=tf.constant(0.1,shape=shape)
- return tf.Variable(initial)
- def conv2d(x,w):
- '''
- tf.nn.conv2d的功能:给定4维的input和filter,计算出一个2维的卷积结果。
- 参数:
- input:[batch,in_height,in_width,in_channel]
- filter:[filter_height,filter_width,in_channel,out_channel]
- strides :一个长为4的list,表示每次卷积之后在input中滑动的距离
- padding: SAME保留不完全卷积的部分,VALID
- '''
- return tf.nn.conv2d(x,w,strides=[1,1,1,1],padding='SAME')
- def max_pool_2x2(x):
- '''
- tf.nn.max_pool进行最大值池化操作,avg_pool进行平均值池化操作
- value:4d张量[batch,height,width,channels]
- ksize: 长为4的list,表示池化窗口的尺寸
- strides:窗口的滑动值
- padding:
- '''
- return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')
- w_conv1=weight_variable([5,5,1,32])#卷积核的大小,输入通道的数目,输出通道的数目
- b_conv1=bias_variable([32])
- h_conv1=tf.nn.elu(conv2d(x_image,w_conv1)+b_conv1)
- h_pool1=max_pool_2x2(h_conv1)
- #第二层
- #卷积核5*5,输入通道为32,输出通道为64
- #卷积前为?*14*14*32 卷积后为?*14*14*64
- #池化后,输出的图像尺寸为?*7*7*64
- w_conv2=weight_variable([5,5,32,64])#卷积核的大小,输入通道的数目,输出通道的数目
- b_conv2=bias_variable([64])
- h_conv2=tf.nn.elu(conv2d(h_pool1,w_conv2)+b_conv2)
- h_pool2=max_pool_2x2(h_conv2)
- #第三层,全连接层,输入维数是7*7*64,输出维数是1024
- w_fc1=weight_variable([7*7*64,1024])
- b_fc1=bias_variable([1024])
- h_pool2_flat=tf.reshape(h_pool2,[-1,7*7*64])
- h_fc1=tf.nn.elu(tf.matmul(h_pool2_flat,w_fc1)+b_fc1)
- keep_prob=tf.placeholder(tf.float32)#这里使用了dropout,即随机安排一些cell输出值为0
- h_fc1_drop=tf.nn.dropout(h_fc1,keep_prob)
- #第四层 输入1024维,输出10维
- w_fc2=weight_variable([1024,10])
- b_fc2=bias_variable([10])
- y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop,w_fc2)+b_fc2)
- y_=tf.placeholder(tf.float32,[None,10])
- 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)#使用adam优化
- correct_prediction=tf.equal(tf.argmax(y_conv,1),tf.argmax(y_,1))#计算准确度
- accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
- sess.run(tf.initialize_all_variables())
- for i in range(20000):
- batch=mnist.train.next_batch(50)
- if i%100==0:
- train_accuracy=accuracy.eval(feed_dict={x:batch[0],y_:batch[1],keep_prob:1})
- print (i,train_accuracy)
- train_step.run(feed_dict={x:batch[0],y_:batch[1],keep_prob:0.5})
- print("test accuracy %g"%accuracy.eval(feed_dict={
- x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}))
tensorflow多层CNN代码分析的更多相关文章
- tensorflow笔记:多层CNN代码分析
tensorflow笔记系列: (一) tensorflow笔记:流程,概念和简单代码注释 (二) tensorflow笔记:多层CNN代码分析 (三) tensorflow笔记:多层LSTM代码分析 ...
- Tensorflow多层LSTM代码分析
1.tf.Graph() 你一旦开始你的任务,就已经有一个默认的图已经创建好了.而且可以通过调用tf.get_default_graph()来访问到. 添加一个操作到默认的图里面,只要简单的调用一个定 ...
- tensorflow笔记:多层LSTM代码分析
tensorflow笔记:多层LSTM代码分析 标签(空格分隔): tensorflow笔记 tensorflow笔记系列: (一) tensorflow笔记:流程,概念和简单代码注释 (二) ten ...
- Tensorflow样例代码分析cifar10
github地址:https://github.com/tensorflow/models.git 本文分析tutorial/image/cifar10教程项目的cifar10_input.py代码. ...
- tensorflow faster rcnn 代码分析一 demo.py
os.environ["CUDA_VISIBLE_DEVICES"]=2 # 设置使用的GPU tfconfig=tf.ConfigProto(allow_soft_placeme ...
- Tensorflow的CNN教程解析
之前的博客我们已经对RNN模型有了个粗略的了解.作为一个时序性模型,RNN的强大不需要我在这里重复了.今天,让我们来看看除了RNN外另一个特殊的,同时也是广为人知的强大的神经网络模型,即CNN模型.今 ...
- [DL学习笔记]从人工神经网络到卷积神经网络_3_使用tensorflow搭建CNN来分类not_MNIST数据(有一些问题)
3:用tensorflow搭个神经网络出来 为什么用tensorflow呢,应为谷歌是亲爹啊,虽然有些人说caffe更适合图像啊mxnet效率更高等等,但爸爸就是爸爸,Android都能那么火,一个道 ...
- FaceRank-人脸打分基于 TensorFlow 的 CNN 模型
FaceRank-人脸打分基于 TensorFlow 的 CNN 模型 隐私 因为隐私问题,训练图片集并不提供,稍微可能会放一些卡通图片. 数据集 130张 128*128 张网络图片,图片名: 1- ...
- Tensorflow简单CNN实现
觉得有用的话,欢迎一起讨论相互学习~Follow Me 少说废话多写代码~ """转换图像数据格式时需要将它们的颜色空间变为灰度空间,将图像尺寸修改为同一尺寸,并将标签依 ...
随机推荐
- java迭代器 常用
19 //使用迭代器遍历ArrayList集合 20 Iterator<String> listIt = list.iterator(); 21 while(listIt.hasNext( ...
- Linux的目录介绍
Linux的目录介绍 Linux系统以目录来组织和管理系统中的所有文件.Linux系统通过目录将系统中所有的文件分级.分层组织在一起,形成了Linux文件系统的树型层次结构.以根目录 “/” 为起点, ...
- Mui 微信支付、支付宝支付
利用mui 发起手机微信和支付宝支付 payStatement :调起微信支付接口的参数 参考文档: https://pay.weixin.qq.com/wiki/doc/api/app/app.ph ...
- Android_Fragment
(一) Faragment有自己的生命周期 Fragment依赖于Activity Fragmen通过getActivity()可以获取所在Activity:Activity通过FragmentMan ...
- vue学习之插槽
插槽 插槽(Slot)是Vue提出来的一个概念,正如名字一样,插槽用于决定将所携带的内容,插入到指定的某个位置,从而使模板分块,具有模块化的特质和更大的重用性. 个人理解:我感觉插槽就是父组件控制插槽 ...
- NOIP模拟 32
我在31反思中膜拜过了B哥 没想到这次又... 我给老姚家丢脸了...STO 首先T1暴力就写挂了... 贪图从$n^3$*$2^n$优化成$n^2$*$2^n$然后打错了 哗哗的扔分 而且正解都想不 ...
- Spring Boot2 系列教程(二十一)整合 MyBatis
前面两篇文章和读者聊了 Spring Boot 中最简单的数据持久化方案 JdbcTemplate,JdbcTemplate 虽然简单,但是用的并不多,因为它没有 MyBatis 方便,在 Sprin ...
- 搞清楚 Python 的迭代器、可迭代对象、生成器
很多伙伴对 Python 的迭代器.可迭代对象.生成器这几个概念有点搞不清楚,我来说说我的理解,希望对需要的朋友有所帮助. 1 迭代器协议 迭代器协议是核心,搞懂了这个,上面的几个概念也就很好理解了. ...
- python之装饰器的两种写法
上一篇文章介绍了 装饰器的概念.现在讲一下在程序中怎么来写装饰器.上代码: def X(fun): def Y(b): print(b) fun() return Y def test(): prin ...
- Java序列化与反序列化三连问:是什么?为什么要?如何做?
Java序列化与反序列化是什么? Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程: 序列化:对象序列化的最主要的用处就是在传递和保存对象 ...