简单的深度神经网络实现——使用PyTorch
使用的数据集是MNIST,预期可以达到98%左右的准确率。
该神经网络由一个输入层,一个全连接层结构的隐含层和一个输出层构建。
1.配置库和配置参数
import torch
import torch.nn as nn
import torchvision.datasets as dsets
import torchvision.transforms as transforms
from torch.autograd import Variable #配置参数
torch.manual_seed(1) #设置随机数种子,确保结果可重复
input_size=784
hidden_size=500
num_classes=10
num_epoches=5 #训练次数
batch_size=100 #批处理大小
learning_rate=0.001 #学习率
2.加载MNIST数据
#加载MNIST数据
train_dataset=dsets.MNIST(root='./data',#数据保持的位置
train=True,#训练集
transform=transforms.ToTensor(),
download=True)
#将一个取值范围是【0,255】的PIL.Image转化成取值范围是【0,1.0】的torch.FloatTensor
test_dataset=dsets.MNIST(root='./data',
train=False,
transform=transforms.ToTensor())
3.数据的批处理一
#数据的批处理
#Data Loader(Input Pipeline)
#数据的预处理,尺寸大小必须为batch_size,在训练集中,shuffle必须设置为True,表示次序是随机的
train_loader=torch.utils.data.DataLoader(dataset=train_dataset,batch_size=batch_size,shuffle=True)
test_loader=torch.utils.data.DataLoader(dataset=test_dataset,batch_size=batch_size,shuffle=False)
4.创建DNN模型
#创建DNN模型
#Neural Network Model(1 hidden layer)定义神经网络模型
class Net(nn.Module):
def __init__(self,input_size,hidden_size,num_classes):
super(Net,self).__init__()
self.fc1=nn.Linear(input_size,hidden_size)
self.relu=nn.ReLU()
self.fc2=nn.Linear(hidden_size,num_classes) def forward(self, x):
out=self.fc1(x)
out=self.relu(out)
out=self.fc2(out)
return out
net=Net(input_size,hidden_size,num_classes)
#打印模型,呈现网络结构
print(net)
5.训练流程
#训练流程
#Loss and Optimizer 定义loss和optimizer
criterion=nn.CrossEntropyLoss()
optimizer=torch.optim.Adam(net.parameters(),lr=learning_rate) #train the model 开始训练
for epoch in range(num_epoches):
for i,(images,labels) in enumerate(train_loader):#批处理
#convert torch tensor to Variable
images=Variable(images.view(-1,28*28))
labels=Variable(labels) #forward+backward+optimize
optimizer.zero_grad()#zero the gradient buffer梯度清零,以免影响其他batch
outputs=net(images)#前向传播
loss=criterion(outputs,labels)#loss
loss.backward()#后向传播,计算梯度
optimizer.step()#梯度更新 if(i+1)%100==0:
print('Epoch [%d/%d],Step[%d,%d],Loss:%.4f'%(epoch+1,num_epoches,i+1,len(train_dataset)//batch_size,loss.item()))
6.在测试集测试识别率
#Test the model,在测试集上验证模型
correct=0
total=0
for images,labels in test_loader:#test set批处理
images=Variable(images.view(-1,28*28))
outputs=net(images)
_,predicted=torch.max(outputs.data,1)#预测结果
total+=labels.size(0)#正确结果
correct+=(predicted==labels).sum()#正确结果总数
print('Accuracy of the network on thr 10000 test iamges:%d %%'%(100*correct/total))
简单的深度神经网络实现——使用PyTorch的更多相关文章
- C++从零实现简单深度神经网络(基于OpenCV)
代码地址如下:http://www.demodashi.com/demo/11138.html 一.准备工作 需要准备什么环境 需要安装有Visual Studio并且配置了OpenCV.能够使用Op ...
- 深度神经网络在量化交易里的应用 之二 -- 用深度网络(LSTM)预测5日收盘价格
距离上一篇文章,正好两个星期. 这边文章9月15日 16:30 开始写. 可能几个小时后就写完了.用一句粗俗的话说, "当你怀孕的时候,别人都知道你怀孕了, 但不知道你被日了多少回 ...
- Keras入门(一)搭建深度神经网络(DNN)解决多分类问题
Keras介绍 Keras是一个开源的高层神经网络API,由纯Python编写而成,其后端可以基于Tensorflow.Theano.MXNet以及CNTK.Keras 为支持快速实验而生,能够把 ...
- 深度神经网络DNN的多GPU数据并行框架 及其在语音识别的应用
深度神经网络(Deep Neural Networks, 简称DNN)是近年来机器学习领域中的研究热点,产生了广泛的应用.DNN具有深层结构.数千万参数需要学习,导致训练非常耗时.GPU有强大的计算能 ...
- 如何用70行Java代码实现深度神经网络算法
http://www.tuicool.com/articles/MfYjQfV 如何用70行Java代码实现深度神经网络算法 时间 2016-02-18 10:46:17 ITeye 原文 htt ...
- 深度神经网络(DNN)模型与前向传播算法
深度神经网络(Deep Neural Networks, 以下简称DNN)是深度学习的基础,而要理解DNN,首先我们要理解DNN模型,下面我们就对DNN的模型与前向传播算法做一个总结. 1. 从感知机 ...
- 深度神经网络(DNN)反向传播算法(BP)
在深度神经网络(DNN)模型与前向传播算法中,我们对DNN的模型和前向传播算法做了总结,这里我们更进一步,对DNN的反向传播算法(Back Propagation,BP)做一个总结. 1. DNN反向 ...
- 深度神经网络(DNN)损失函数和激活函数的选择
在深度神经网络(DNN)反向传播算法(BP)中,我们对DNN的前向反向传播算法的使用做了总结.里面使用的损失函数是均方差,而激活函数是Sigmoid.实际上DNN可以使用的损失函数和激活函数不少.这些 ...
- 深度神经网络(DNN)的正则化
和普通的机器学习算法一样,DNN也会遇到过拟合的问题,需要考虑泛化,这里我们就对DNN的正则化方法做一个总结. 1. DNN的L1&L2正则化 想到正则化,我们首先想到的就是L1正则化和L2正 ...
随机推荐
- Vue工程化入口文件main.js中Vue.config.productionTip = false含义
阻止启动生产消息,常用作指令.通俗理解为消息提示的环境配置. 阻止启动生产消息 這又是什麽意思? 看下效果 (1)Vue.config.productionTip = false (2)Vue.con ...
- python3.5.3rc1学习二
#if else示例x = 5y = 8 if x > y: print("x is greater than y")else: print("x is not g ...
- 【Eureka篇三】Eureka比Zookeeper好在哪里?(8)
Eureka遵守AP,Zookeeper遵守CP RDBMS(oracle/mysql.sqlServer) ====> ACID, 关系型数据库遵循ACID原则 NoSQL(redis/mon ...
- LG4170/BZOJ1260 「CQOI2007」涂色 区间DP
区间DP 发现可以转化为区间包含转移. 考虑区间\([l,r]\),分为两种情况. \(col[l]=col[r]\) 此时相当于在涂\([l,r-1]\)或\([l+1,r]\)顺带着涂掉 \[f( ...
- Python else
Python else else 可以用来搭配其他语句完成条件判断 最常用的就是 if...else... 当然还有一些其他语句也可以配合 else 使用 if if...else... 是最简单的条 ...
- UTC和GMT什么关系?moment处理世界时问题
UTC和GMT什么关系? 个人理解,两者基本一样,要说区别,那就是UTC更准确,而GMT误差有点.由于历史原因,以前用GMT,后来发现有些误差,改用UTC 我们可以看到,JS的 Date() 用的是G ...
- eclipse maven项目如何将所有的jar包复制到lib目录下?
1.情景展示 我们知道,maven项目的jar包并不存在于项目当中,项目所需的jar包都保存在本地仓库中,如果本地仓库没有,会从配置的中央仓库下载,如果中央仓库也没有就会报错: 如上图所示,我想将 ...
- Mac 电脑无法登陆 账号了
版本:10.14.2 每次输入用户名和密码都没有反应: 进入 命令行执行: defaults delete com.apple.appstore.commerce Storefront 然后重启机器, ...
- Shell基本运算符之字符串运算符
Shell基本运算符 1.字符串运算符 常用的字符串运算符 运算符 说明 例子 = 检测两字符串是否相等,相等返回true [ $a = $b ] != 检测两个字符串是否部相等,不相等返回true ...
- git 给分支添加描述 管理分支实用方法
1.背景 在我们工作中,正常情况我们处在一个迭代中,一个人最多会有几个功能,比较正常的操作我们会给每个大功能创建不同的分支,方便管理. 我们可以非常愉快的进行版本管理,遇到特殊情况我们也可以方便版本退 ...