《人工智能应用开发》课件-第8、9章手写数字识别_第1页
《人工智能应用开发》课件-第8、9章手写数字识别_第2页
《人工智能应用开发》课件-第8、9章手写数字识别_第3页
《人工智能应用开发》课件-第8、9章手写数字识别_第4页
《人工智能应用开发》课件-第8、9章手写数字识别_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PyTorch框架基础实践目录1PyTorch简介开源的机器学习/深度学习框架2017年1月,FAIR(FacebookAIResearch)发布了PyTorch0.1它强调易用性和灵活性,并允许用深度学习领域惯用的Python来表示深度学习模型PyTorch提供了一个核心数据结构—张量(Tensor)类似的框架还有TensorFlow、PaddlePaddle、MindSpore等PyTorch简介PyTorch是什么?详见官网:

快速安装:pipinstalltorch课程代码运行环境:Python3.9.x、PyTorch1.13.0PyTorch简介环境搭建目录1PyTorch简介2Tensor操作创建张量importtorcha=torch.tensor(0.1)b=torch.tensor(0.3,dtype=torch.float64)result=a+bprint(result)0.4Tensor操作张量(Tensor):PyTorch网络运算中的基本数据结构(类似ndarray)ones=torch.ones((3,2))#全1张量range_tensor=torch.arange(1,11,1)#等差序列张量print('ones:',ones,'\n','range_tensor:',range_tensor)ones:tensor([[1.,1.],[1.,1.],[1.,1.]])range_tensor:tensor([1,2,3,4,5,6,7,8,9,10])Tensor操作创建特定的张量output=torch.zeros((2,2),dtype=torch.float32)print("output:{}".format(type(output)))n_output=output.numpy()print("n_output:{}".format(type(n_output)))torch.from_numpy(n_output)#将ndarray转为tensoroutput:<class'torch.Tensor’>n_output:<class'numpy.ndarray'>Tensor操作tensor与ndarray相互转化目录1PyTorch简介2Tensor操作3构建一个线性模型请根据这100个样本数据找出合适的𝑤和𝑏使得𝑦=𝑤𝑥+𝑏构建一个线性模型任务描述

xy00.170.3310.110.3420.520.5130.930.4640.180.4850.670.466……读取数据构造一个线性模型构造优化器最小化方差(训练)性能评估构建一个线性模型任务:构建一个线性模型𝑦=𝑤𝑥+𝑏

xy00.170.3310.110.3420.520.5130.930.4640.180.4850.670.466……Currentloss:58.542225data=pd.read_csv('line_fit_data.csv').values#将数据读取后存储为ndarray格式X=torch.tensor(data[:,0],dtype=torch.float32)#样本自变量y=torch.tensor(data[:,1],dtype=torch.float32)#目标变量构建一个线性模型1.读取数据#构造一个线性模型deflinear_model(X,W,b):returnW*X+b#构造损失函数defloss_fn(y_true,y_pre):return((y_true-y_pre)**2).mean()构建一个线性模型2.构造一个线性模型y_pre=line_model(X,w,b)#前向传播loss=loss_fn(y,y_pre)#计算损失loss.backward()#反向传播构建一个线性模型3.构造优化器y_pre=line_model(X,w,b)#前向传播loss=loss_fn(y,y_pre)#计算损失loss.backward()#反向传播b.data-=learning_rate*b.grad#沿着梯度反方向更新权值w.data-=learning_rate*w.grad#沿着梯度反方向更新阈值#注意在权值更新后须清零张量的梯度w.grad.zero_()b.grad.zero_()构建一个线性模型4.最小化方差(训练)构建一个线性模型模型训练前Currentloss:58.542225Epoch0Loss=19.8392w=-8.41b=8.99Epoch1Loss=8.9474w=-7.80b=9.07Epoch2Loss=8.0281w=-7.34b=8.89Epoch3Loss=7.3553w=-6.92b=8.69……Epoch75Loss=0.0139w=2.09b=4.20Epoch76Loss=0.0127w=2.11b=4.20……Epoch175Loss=0.0000w=2.49b=4.00构建一个线性模型模型训练中训练中的模型变化过程构建一个线性模型模型训练后Currentloss:3.2196497e-06目录1PyTorch简介2Tensor操作3构建一个线性模型4识别手写数字识别手写数字目标:构建一个神经网络模型,识别图像中的数字。model509MNIST数据集包括70000个0~9的手写数字图像,每张图像包括784个像素值及一个标签。识别手写数字认识数据加载数据数据加工构建模型(搭建网络)模型配置模型训练与保存模型应用识别手写数字案例流程data=np.load('mnist.npz’)train_images,train_labels,test_images,test_labels=data['x_train'],data['y_train'],data['x_test'],data['y_test']识别手写数字认识数据共70000张照片,其中训练集60000张,测试集10000张print(train_images.shape)print(train_labels.shape)print(test_images.shape)print(test_labels.shape)(60000,28,28)(60000,)(10000,28,28)(10000,)识别手写数字认识数据使用torchvision.datasets下载MNIST数据集,并划分好训练集与测试集。torchvision.datasets.MNIST(root,train=True,transform=None,target_transform=None,download=False)root(string):数据集在本地的保存地址train(bool):True=训练集,False=测试集,默认为Truetransform(callable,optional):一个转换函数,将PIL图像转换为别的形式输出target_transform(callable,optional):一个函数,输入为target,输出对其的转换download(bool,optional):如果为True,从互联网上下载数据集,并把数据集放在root目录下识别手写数字加载数据(调用mindspore内置数据集)对于torch网络暂不支持直接加载的数据集,可以通过Dataset和DataLoader来进行加工转化。X_train_tensor=torch.tensor(X_train/255,dtype=torch.float32)y_train_tensor=torch.tensor(y_train,dtype=64)train_ds=TensorDataset(X_train_tensor,y_train_tensor)#转为tensordata格式train_dl=torch.utils.data.DataLoader(train_ds,batch_size=32,shuffle=True)#执行打乱和分批操作识别手写数字加载自定义数据识别手写数字网络结构隐藏层输入层x1x2xix784flaten激活函数:输出层h1h2h128y1y2y10衡量两个概率分布之间的差异识别手写数字损失函数/目标函数:交叉熵(cross-entropy)识别手写数字搭建网络#定义损失函数loss_fn=torch.nn.CrossEntropyLoss()#定义优化器optimizer=torch.optim.SGD(network.parameters(),lr=0.01)识别手写数字定义网络参数forepochinrange(1,21):forimg,labelintrain_dl:y_pre=network(img)loss=loss_fn(y_pre,label)network.zero_grad()#将网络中的所有梯度清空

loss.backward()#根据网络损失值进行反向求导

optimizer.step()#对网络权值进行优化

print('第{}轮最后一批样本训练损失值为:{}'.format(epoch,loss.item()))识别手写数字网络训练#将测试集数据放入训练好的模型中进行性能评估predicted=network(X_test_tensor)result=predicted.data.numpy().argmax(axis=1)acc_test=(result==y_test).mean()print('模型测试精度:',acc_test)识别手写数字模型性能评估先搭建一个与训练时结构一致的网络,然后将保存好的参数导入其中model=NetWork()#构建模型model_state_dict=torch.load('mnist-1.pt')#加载训练好的模型参数model.load_state_dict(model_state_dict)#将参数导入模型中识别手写数字模型应用foriinrange(30):image=plt.imread('test_images/{}.jpg'.format(i))#读取照片

image=torch.tensor(image/255,dtype=torch.float32)#将数据转为tensorimage=im

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论