手动设计神经网络进行MNIST分类
前言:
用手工设计的两层神经网络,经过200个epoch,最后得到0.9599,约0.96的精度
正文
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data #载入数据集
mnist = input_data.read_data_sets("MNIST_data\MNIST_data",one_hot=True) #每个批次的大小
batch_size = 32
#计算一共有多少个批次
n_batch = mnist.train.num_examples // batch_size #定义两个placeholder
x = tf.placeholder(tf.float32,[None,784])
y = tf.placeholder(tf.float32,[None,10])
y_ = tf.cast(tf.argmax(y,axis=1),tf.int32)
#创建一个简单的神经网络
W_1 = tf.Variable(tf.random_normal([784,120],dtype=tf.float32))
b_1 = tf.Variable(tf.zeros([120]))
h_1 = tf.nn.relu(tf.matmul(x,W_1)+b_1) W_2 = tf.Variable(tf.random_normal([120,10],dtype=tf.float32))
b_2 = tf.Variable(tf.zeros([10]))
prediction = tf.matmul(h_1,W_2)+b_2
prediction_ = tf.nn.softmax(tf.matmul(h_1,W_2)+b_2) # #二次代价函数
#loss = tf.reduce_mean(tf.square(y-prediction))
#交叉熵损失函数
#loss = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y_, logits=prediction_)
loss = tf.losses.sparse_softmax_cross_entropy(labels=y_,logits=prediction)
#loss = tf.reduce_mean(-tf.reduce_sum(y * tf.log(prediction),reduction_indices=[1]))
#使用梯度下降法
train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss) #初始化变量
init = tf.global_variables_initializer() #结果存放在一个布尔型列表中
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(prediction_,1)) #返回最大值所在位置,1表示行的维度
#求准确率
accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) with tf.Session() as sess:
sess.run(init)
for epoch in range(200):
for batch in range(n_batch):
batch_xs, batch_ys = mnist.train.next_batch(batch_size)
sess.run(train_step, feed_dict={x:batch_xs,y:batch_ys}) acc = sess.run(accuracy,feed_dict={x:mnist.test.images, y:mnist.test.labels})
print("Iter"+str(epoch)+',Testing Accuracy'+str(acc))
其中要注意的地方应该有:
loss函数的计算,用了tf.losses.sparse_softmax_cross_entropy这个交叉熵损失函数,其中:
labels_的输入是样本是真实标签,类似于[1,2,3,4,5,1,1,2....]这种,
所以,MNIST的样本标签是one-hot形式的,要先用tf.argmax转换成上述形式;
logits的输入类似于[1.22,4.23,2.45,...]这种,由于该函数会先进行logits-->softmax的计算,所以不用先把logits转换为softmax形式;
手动设计神经网络进行MNIST分类的更多相关文章
- Pytorch搭建卷积神经网络用于MNIST分类
import torch from torch.utils.data import DataLoader from torchvision import datasets from torchvisi ...
- matlab练习程序(神经网络识别mnist手写数据集)
记得上次练习了神经网络分类,不过当时应该有些地方写的还是不对. 这次用神经网络识别mnist手写数据集,主要参考了深度学习工具包的一些代码. mnist数据集训练数据一共有28*28*60000个像素 ...
- deep_learning_LSTM长短期记忆神经网络处理Mnist数据集
1.RNN(Recurrent Neural Network)循环神经网络模型 详见RNN循环神经网络:https://www.cnblogs.com/pinard/p/6509630.html 2. ...
- TensorFlow——LSTM长短期记忆神经网络处理Mnist数据集
1.RNN(Recurrent Neural Network)循环神经网络模型 详见RNN循环神经网络:https://www.cnblogs.com/pinard/p/6509630.html 2. ...
- L26 使用卷积及循环神经网络进行文本分类
文本情感分类 文本分类是自然语言处理的一个常见任务,它把一段不定长的文本序列变换为文本的类别.本节关注它的一个子问题:使用文本情感分类来分析文本作者的情绪.这个问题也叫情感分析,并有着广泛的应用. 同 ...
- 使用pytorch快速搭建神经网络实现二分类任务(包含示例)
使用pytorch快速搭建神经网络实现二分类任务(包含示例) Introduce 上一篇学习笔记介绍了不使用pytorch包装好的神经网络框架实现logistic回归模型,并且根据autograd实现 ...
- CVPR2022 | A ConvNet for the 2020s & 如何设计神经网络总结
前言 本文深入探讨了如何设计神经网络.如何使得训练神经网络具有更加优异的效果,以及思考网络设计的物理意义. 欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结.最新技术跟踪.经典论文解读.CV招聘 ...
- 芝麻HTTP:TensorFlow LSTM MNIST分类
本节来介绍一下使用 RNN 的 LSTM 来做 MNIST 分类的方法,RNN 相比 CNN 来说,速度可能会慢,但可以节省更多的内存空间. 初始化 首先我们可以先初始化一些变量,如学习率.节点单元数 ...
- 用标准3层神经网络实现MNIST识别
一.MINIST数据集下载 1.https://pjreddie.com/projects/mnist-in-csv/ 此网站提供了mnist_train.csv和mnist_test.cs ...
随机推荐
- CDN学习记录
0x00 简介 CDN的全称是Content Delivery Network,即内容分发网络.CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡.内容分 ...
- Web Api 接口返回值不困惑:返回值类型详解
前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学习Webapi的园友们速速动起来,跟着博主一起来学习吧.之前分享过一篇 WebApi 接口参数:传参详解,这篇博文内容本身很基础 ...
- 为什么“或命题"真假的判断是有真则真?
我:为什么"或命题"真假的判断是有真则真? 长沙刘老师:难道不是吗? 我:是经验,约定,还是严格证明? L神:为什么不自己看书? 我:想严格推理证明 L神: L神:我学过的教材里是 ...
- eclipse安装hibernate tools插件
第一步:在eclipse菜单中选择Help>Install New Software,弹出安装插件的窗口,如图: 在Work with:后面输入http://download.jboss.org ...
- python导入不同目录下的自定义模块
一.代码目录结构 自定义的模块在Common包下,Study文件下SelectionSort.py文件导入自定义的模块 二.源码 2.1:SelectionSort.py文件 python导包默认 ...
- SpringBoot的项目构建
手动构建SpringBoot项目 一.手动构建一个Maven,选择...webapp或者选择快速骨架生成,然后命名并生成项目: 二. 在pom.xml中,进行三处配置: 设置父模块,子模块就可以继承 ...
- 30. ClustrixDB 分布式架构/Rebalancer
Rebalancer是一个自动化系统,用于维护集群中数据的健康分布.通过修改数据的分布和位置来响应“不健康”集群是Rebalancer的工作.Rebalancer是一个在线进程,它影响对集群的更改,对 ...
- cast() 函数进行类型转换
service_fee 字段定义:`service_fee` decimal(14,4) NULL DEFAULT NULL COMMENT '手续费金额,含税' , 需求:service_fee ...
- python深度学习:矩阵转置(transpose)
转置:即行列转换. import numpy as np import matplotlib.pyplot as plt C=np.array([[1,2,3],[4,5,6]]) # Display ...
- 创建 Smarty 对象
/* //if (!defined('INIT_NO_SMARTY')) //{ header('Cache-control: private'); header('Content-type: tex ...