深度学习-使用PyTorch模拟二次函数
Posted Vivinia_Vivinia
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习-使用PyTorch模拟二次函数相关的知识,希望对你有一定的参考价值。
目标效果:
import torch
import torch.nn.functional as f
from torch.autograd import Variable
import matplotlib.pyplot as plt
"""生成随机数据"""
x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1) # x轴数据从-1到1,共100个数据,unsqueeze把一维的数据变为2维的数据
y = x.pow(2) + 0.2 * torch.rand(x.size()) # y=x*2,但是还要加上波动
x, y = Variable(x), Variable(y) # 变成Variable的形式,神经网络只能输入Variable
"""创建神经网络"""
class Net(torch.nn.Module):
def __init__(self, n_feature, n_hidden, n_output): # 初始化信息
super(Net, self).__init__()
self.hidden = torch.nn.Linear(n_feature, n_hidden) # 一层隐藏层神经网络,输入信息,输出信息(神经元个数)
self.predict = torch.nn.Linear(n_hidden, n_output) # 一层预测层神经网络,输入信息,输出信息(神经元个数)
def forward(self, x): # 前向传递,x为输入信息
x = f.relu(self.hidden(x)) # 出了隐藏层要激活
x = self.predict(x)
return x
"""打印处理数据"""
net = Net(1, 10, 1) # 输入值1个x,隐藏层10个,输出值一个y
plt.ion() # 实时打印的过程
plt.show()
optimizer = torch.optim.SGD(net.parameters(), lr=0.5) # 使用优化器优化神经网络参数,lr为学习效率,SGD为随机梯度下降法
loss_func = torch.nn.MSELoss() # 均方差处理回归问题
for t in range(100): # 循环训练
prediction = net(x) # 输入x,得到预测值
loss = loss_func(prediction, y) # 计算损失,预测值和真实值的对比
optimizer.zero_grad() # 梯度先全部降为0
loss.backward() # 反向传递过程
optimizer.step() # 以学习效率0.5来优化梯度
"""循环打印"""
if t % 5 == 0: # 每五步打印一次
plt.cla() # 清除当前图形中的当前活动轴。其他轴不受影响
plt.scatter(x.data.numpy(), y.data.numpy()) # 打印原始数据
plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5) # 打印预测数据
plt.text(0.5, 0, 'Loss=%.4f' % loss.data, fontdict='size': 20, 'color': 'red') # 打印误差值
plt.pause(0.1) # 每次停顿0.1
plt.ioff()
plt.show()
还是觉得PyTorch比Tensorflow好用点,就是这两年PyTorch更新太快,看视频啥的很多语法都换了,有点头大。
以上是关于深度学习-使用PyTorch模拟二次函数的主要内容,如果未能解决你的问题,请参考以下文章
DataWhale 动手学深度学习PyTorch版-task3+4+5:文本预处理;语言模型;循环神经网络基础