CNN/RNN TF1.4

###CNN###
import
tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data'''这些是tf1.*版本,现在我已经升级到2.0版本,上方数据集都用不了了...''''''黑白图片,因此这里使用的是2D'''mnist=input_data.read_data_sets("MNIST_data",one_hot=True)batch_size=100 n_batch=mnist.train.num_examples//batch_sizetf=tf.compat.v1#初始化权值(这样初始化真的很重要) def weight_variable(shape):initial=tf.truncated_normal(shape=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):#x:输入 【batch,in_height,in_width,in_channels(通道数)】#W:滤波器#strides:步长#padding:个人选择:SAME/VALIDreturn tf.nn.conv2d(x,W,strides=[1,1,1,1],padding="SAME")#池化层 def max_pool_2x2(x):#ksize=[1 x y 1] #步长2return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')#用max_pool2d也是可以的 x=tf.placeholder(tf.float32,[None,784]) y=tf.placeholder(tf.float32,[None,10])#改变x的格式转为4D的向量[batch,in_height,in_width,in_channels] x_image=tf.reshape(x,[-1,28,28,1])#-1还是那个意思,就是输入的个数不确定,让它自行计算是多少#初始化第一个卷积层的权值和偏置 W_conv1=weight_variable([5,5,1,32])#5*5采样窗口,32个卷积核从1个平面抽取特征(从一个平面提取32个特征平面)【就是生成1D的32个卷积核,分别进行卷积,从而1个平面得到32个卷积特征平面】 b_conv1=bias_variable([32])#给这个卷积核设置一个偏置值#把x_image和权值向量进行卷积,再加上偏置值,然后应用relu激活函数 h_cov1=tf.nn.relu(conv2d(x_image,W_conv1)+b_conv1)#利用平面(2D)卷积进行卷积,并加一个偏置,得到批次*32个平面的 h_pool1=max_pool_2x2(h_cov1)#进行max-pooling#初始化第二个卷积层的权值和偏置 W_conv2=weight_variable([5,5,32,64])#5*5采样窗口,64个卷积核从32个平面抽取特征(从32个平面提取64个特征平面)【生成32D的64个卷积核,分别进行卷积,从而得到1个包含64个卷积平面】 b_conv2=bias_variable([64])#么个卷积核设置一个偏置值#把h_pool1和权值向量进行卷积,再加上偏置值,然后应用relu激活函数 h_cov2=tf.nn.relu(conv2d(h_pool1,W_conv2)+b_conv2) h_pool2=max_pool_2x2(h_cov2)#进行max-pooling#28*28的图片第一次卷积后还是28*28,第一次初花后变成14*14 #第二次卷积后14*14,第二次池化后变成7*7 #上方操作完后的得到64张7*7的平面'''下方就是正常的神经网络(全连接)'''#初始化第一个全连接层的权值 W_fc1=weight_variable([7*7*64,1024])#上一层有7*7*64个神经元,全连接层有1024个神经元 b_cf1=bias_variable([1,1024])#将池化层2的输出扁平化为1维 h_pool2_flat=tf.reshape(h_pool2,[-1,7*7*64])#100,7*7*64 #求第一个全连接层的输出 h_fc1=tf.nn.relu(tf.matmul(h_pool2_flat,W_fc1)+b_cf1)#keep_prob用来表示神经元的输出概率 keep_prob=tf.placeholder(tf.float32) h_fc1_drop=tf.nn.dropout(h_fc1,keep_prob)#初始化第二个全连接层 W_fc2=weight_variable([1024,10]) b_cf2=bias_variable([1,10])#计算输出 prediction=tf.nn.softmax(tf.matmul(h_fc1_drop,W_fc2)+b_cf2)#交叉熵代价函数 cross_entropy=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=prediction)) #优化器 train_step=tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)#结果存放在一个布尔列表中 correct_prediction=tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))acc=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))with tf.Session() as sess:sess.run(tf.global_variables_initializer())for i in range(21):for batch in range(n_batch):batch_x,batch_y=mnist.train.next_batch(batch_size)sess.run(train_step,feed_dict={x:batch_x,y:batch_y,keep_prob:0.7})accuracy=sess.run(acc,feed_dict={x:mnist.test.images,y:mnist.test.labels,keep_prob:1.0})print(""+str(i+1)+"次迭代准确率为:"+str(accuracy))

 

###RNN###
import
tensorflow as tf from tensorflow.examples.tutorials.mnist import input_datamnist=input_data.read_data_sets("MNIST_data",one_hot=True)tf=tf.compat.v1#输入图片是28*28 n_input=28#输入一行,一行有28个数据 max_time=28#一共28行 lstm_size=100#隐藏单元 n_classes=10#10个分类 batch_size=50#m每个批次50个样本 n_batch=mnist.train.num_examples//batch_size#一共有多少个批次 x=tf.placeholder(tf.float32,[None,784]) y=tf.placeholder(tf.float32,[None,10])'''下方权重是隐藏层和输出层之间的权重和偏置''' #初始化权值 weights=tf.Variable(tf.truncated_normal([lstm_size,n_classes],stddev=0.1)) #初始化偏置值 biases=tf.Variable(tf.constant(0.1,shape=[1,n_classes]))#定义RNN网络 def RNN(x,weights,biases):#inputs=[batch_size,max_time,n_input]>>[batch_size,in_height,in_width]inputs=tf.reshape(x,[-1,max_time,n_input])#定义LSTM基本CELLlstm_Cell=tf.nn.rnn_cell.BasicLSTMCell(lstm_size)#每个隐藏层中都会有一个cell#final_state[0]是cell_state#final_state[1]是hidden_state 由34行可见该形状为 ?*100(隐藏单元个数) 由返回值prediction可知results它与y形状相同(50,10) 所以他的形状为50(batch_size)*100(隐藏单元个数)outputs,final_state=tf.nn.dynamic_rnn(lstm_Cell,inputs,dtype=tf.float32)results=tf.nn.softmax(tf.matmul(final_state[1],weights)+biases)#经过softmax转化为概率显示return results#计算RNN返回结果 prediction=RNN(x,weights,biases) #损失函数 cross_entropy=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction,labels=y)) #使用Adam优化器 train_step=tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)correct_prediction=tf.equal(tf.argmax(y,1),tf.argmax(prediction,1)) accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))init=tf.global_variables_initializer()with tf.Session() as sess:sess.run(init)for i in range(21):for j in range(n_batch):batch_x,batch_y=mnist.train.next_batch(batch_size)sess.run(train_step,feed_dict={x:batch_x,y:batch_y})acc=sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels})print(""+str(i+1)+"次迭代准确率为:"+str(acc))

 

转载于:https://www.cnblogs.com/ningxinjie/p/11412665.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386181.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java-类与对象

Java,从一开始学习这门技术,我们就被注入了一个概念——“Java是一门面向对象编程语言。”是的,Java之所以简单而具有优势,就是因为面向对象所带来的方便。这种方式免去了C 中反复而难以理解的指针和多继承,“可以让程…

Hibernate学习笔记(一)

####1.1Hibernate框架的学习路线第一天:Hibernate的入门(Hibernate的环境搭建、Hibernate的API、Hibernate的CRUD)第二天:Hibernate的一级缓存、其他的API第三天:Hibernate的一对多配置、Hibernate的多对多的配置…

Java-进阶:Java-File--IO—1

#目录 一、File 类 二、IO流 三、字节输出流 四、字节输入流 五、字节流文件复制 六、字符输出流 七、字符输入流 八、字符流复制文本文件 ##一、File 类 ###1. 概述 文件 和 目录路径名 的抽象表达形式 Java中把文件或者目录(文件夹)都封装成 File对象…

北理工爬虫课程学习记录

Requests post方法如果提交字典会被存到form下,如果直接提交字符串,会被存到data下 put方法和post类似,只不过他会覆盖原始数据 ###各个方法的使用### 13个 访问参数 url修改的字段 //模拟浏览器进行访问 //模拟不同的IP地址对这个网站进行访…

Java-进阶:Java-File--IO—2

目录 一、转换流 二、字节缓冲流 三、字符缓冲流 四、序列化流与反序列化流 五、打印流 六、标准输入、输出流 七、IO流总结 一、转换流 1. OutputStreamWriter 类 (1) 概述 java.io.OutputStreamWriter继承 Writer类;就是一个字符输出流…

Hibernate学习笔记(二)

Hibernate概述: 什么是Hibernate:是一个持久层的ORM的框架 什么是ORM: ORM:对象关系映射,指的是将一个java中的对象与关系型数据库中的表建立一种映射关系,从而操作对象就可以完成数据库的相关操作为什么学习Hibernate 简化JDBC的开发 性能很好Hibernate…

Java-进阶:多线程1

目录 一、概述 二、Thread 类 三、创建线程:继承 Thread 类 四、创建线程:实现 Runnable 接口 五、线程优先级 六、线程的生命周期 七、同步代码块 一、概述 1. 进程和线程 进程:进程指正在运行的程序。线程:线程是进程中的一个…

Struts2学习笔记(一)--入门常见配置

Struts2框架的学习路线 l 第一天:Struts2的概述、Struts2的入门、Struts2常见的配置、Struts2的Action的编写 l 第二天:Struts2的数据的封装、结果页面配置 l 第三天:Struts2的值栈和OGNL表达式 l 第四天:Struts2的标签库 Struts2…

Java-进阶:多线程2

目录 一、Lock 接口 二、线程间的通信 三、线程池 四、定时器 Timer 五、多线程和异常 一、Lock 接口 1. 线程锁 锁是控制多个线程对共享资源进行访问的工具。通常,锁提供了对共享资源的独占访问。一次只能有一个线程获得锁,对共享资源的所有访问…

Java周总结1

一、计算机高级编程语言类型: a.编译型 b.解释型 Hello.java Java源文件 编译 Hello.class 字节码文件 解释 01101100.... (二进制)机器码指令 computer…

MMKV集成与原理,先收藏了

标准文档流 标准文档流,指的是元素排版布局过程中,元素会默认自动从左往右,从上往下的流式排列方式。前面内容发生了变化,后面的内容位置也会随着发生变化。 HTML就是一种标准文档流文件 HTML中的标准文档流特点通过两种方式体现…

Java周总结3

撰写第三周课程总结及实验报告(一) Java实验报告 班级 计科一班 学号 20188375 姓名 汤云云 完成时间 评分等级 实验一 Java开发环境与简单Java程序 一、 实验目的 (1) 熟悉JDK开…

MMKV集成与原理,吊打面试官系列!

前言 校招 -1 年 这个阶段还属于成长期,更需要看重的是你的基础和热情。对于 JS 基础,计算机基础,网络通信,算法等部分的要求会相对高一些。毕竟这个阶段比较难考察你的业务项目中的沉淀,所以只能从基础部分入手考察。…

CV2摄像头人脸、人眼、微笑等检测

import cv2face_cascade cv2.CascadeClassifier(cv2.data.haarcascades haarcascade_frontalface_default.xml)#人脸 eye_cascade cv2.CascadeClassifier(cv2.data.haarcascades haarcascade_eye.xml)#人眼 smile_cascadecv2.CascadeClassifier(cv2.data.haarcascades haa…

MMKV集成与原理,成功跳槽阿里!

前言 在初学前端的时候,我们总会遇到一些问题,我们可以在网上看到很多关于前端的这些问题: 你们都是怎么学web前端的? 零基础,怎么自学好前端? 前端需要学多久,都学哪些知识? 想成为…

第四周课程总结试验报告(二)

Java实验报告 实验二 Java简单类与对象 一、 实验目的 (1) 掌握类的定义,熟悉属性、构造函数、方法的作用,掌握用类作为类型声明变量和方法返回值; (2) 理解类和对象的区别,掌握构造…

MMKV集成与原理,薪资翻倍

毕业工作一年之后,有了转行的想法,偶然接触到程序员这方面,产生了浓厚且强烈的兴趣,开始学习前端,成功收割了大厂offer,开始了我的程序员生涯。 在自学过程中有过一些小厂的面试经历,也在一些小…

Spring入门与常用配置

什么是Spring Spring:SE/EE开发的一站式框架。 一站式框架:有EE开发的每一层解决方案。 WEB层 :SpringMVC Service层 :Spring的Bean管理,Spring声明式事务 DAO层 :Spring的Jdbc模板,Spring的ORM…

MMKV集成与原理,详细学习指南

前言 本文主要是javascript和css方面的基础面试题,适合面试前以及平时复习食用。 基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不…

第五周课程总结实验报告(三)

实验三 String类的应用 一、实验目的 (1) 掌握类String类的使用; (2) 学会使用JDK帮助文档; 二、实验内容 1.已知字符串:"this is a test of java".按要求执行以下操作:&a…