博客
关于我
pytorch分类和回归代码实现
阅读量:230 次
发布时间:2019-02-28

本文共 2924 字,大约阅读时间需要 9 分钟。

PyTorch 神经网络搭建实例

PyTorch 神经网络的搭建通常分为以下几个关键步骤:数据准备、网络架构设计、损失函数与优化器选择以及反向传播与更新。

1. 分类任务示例

import torch
import torch.nn.functional as F
import matplotlib.pyplot as plt
# 数据准备
n_data = 200
x0 = torch.normal(2 * n_data, 1, (100, 2))
y0 = torch.zeros(100)
x1 = torch.normal(-2 * n_data, 1, (100, 2))
y1 = torch.ones(100)
x = torch.cat((x0, x1), 0).type(torch.FloatTensor)
y = torch.cat((y0, y1), 0).type(torch.LongTensor)
# 网络架构定义
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.out = torch.nn.Linear(n_hidden, n_output)
def forward(self, x):
x = F.relu(self.hidden(x))
x = self.out(x)
return x
net = Net(n_feature=2, n_hidden=10, n_output=2)
print(net)
# 优化器与损失函数
optimizer = torch.optim.SGD(net.parameters(), lr=0.02)
loss_func = torch.nn.CrossEntropyLoss()
# 训练过程
plt.ion()
for t in range(100):
out = net(x)
loss = loss_func(out, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if t % 2 == 0:
plt.cla()
prediction = torch.max(out, 1)[1]
accuracy = (prediction.data.numpy() == y.data.numpy()).sum() / y.size()
plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=prediction.data.numpy(), s=100, lw=0, cmap='RdYlGn')
plt.text(1.5, -4, 'Accuracy: %.2f' % accuracy, fontdict={'size': 20, 'color': 'red'})
plt.pause(0.1)
plt.ioff()
plt.show()

2. 回归任务示例

import torch
import torch.nn.functional as F
import matplotlib.pyplot as plt
# 数据准备
x_train = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1).type(torch.FloatTensor)
y_train = x_train.pow(2) + 0.2 * torch.rand(x_train.size())
# 网络架构定义
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 = F.relu(self.hidden(x))
x = self.predict(x)
return x
net = Net(n_feature=1, n_hidden=10, n_output=1)
print(net)
# 优化器与损失函数
optimizer = torch.optim.SGD(net.parameters(), lr=0.2)
criterion = torch.nn.MSELoss()
# 训练过程
plt.ion()
for t in range(200):
prediction = net(x_train)
loss = criterion(prediction, y_train)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if t % 5 == 0:
plt.cla()
plt.scatter(x_train.numpy(), y_train.numpy())
plt.plot(x_train.numpy(), prediction.data.numpy(), 'r-', lw=5)
plt.text(0.5, 0, 'Loss: %.4f' % loss.item(), fontdict={'size': 20, 'color': 'red'})
plt.pause(0.1)
plt.ioff()
plt.show()

3. 优化后的代码解释

在上述代码中,主要进行了以下改进:

  • 代码注释优化:增加了注释,方便理解每一步操作的意义
  • 代码风格统一:采用了更一致的代码格式,提升可读性
  • 性能优化:通过将变量命名更具信息量,提升代码可读性
  • 可扩展性增强:增加了更多的注释,方便后续功能扩展
  • 通过以上代码示例,可以清晰地看到从数据准备到模型训练再到结果可视化的完整流程。每一步都经过精心设计,确保代码既简洁又高效。

    转载地址:http://jfxp.baihongyu.com/

    你可能感兴趣的文章
    no connection could be made because the target machine actively refused it.问题解决
    查看>>
    No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
    查看>>
    No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
    查看>>
    No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc
    查看>>
    No mapping found for HTTP request with URI [/...] in DispatcherServlet with name ...的解决方法
    查看>>
    No mapping found for HTTP request with URI [/logout.do] in DispatcherServlet with name 'springmvc'
    查看>>
    No module named 'crispy_forms'等使用pycharm开发
    查看>>
    No module named cv2
    查看>>
    No module named tensorboard.main在安装tensorboardX的时候遇到的问题
    查看>>
    No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
    查看>>
    No new migrations found. Your system is up-to-date.
    查看>>
    No qualifying bean of type XXX found for dependency XXX.
    查看>>
    No qualifying bean of type ‘com.netflix.discovery.AbstractDiscoveryClientOptionalArgs<?>‘ available
    查看>>
    No resource identifier found for attribute 'srcCompat' in package的解决办法
    查看>>
    no session found for current thread
    查看>>
    No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
    查看>>
    NO.23 ZenTaoPHP目录结构
    查看>>
    no1
    查看>>
    NO32 网络层次及OSI7层模型--TCP三次握手四次断开--子网划分
    查看>>
    NOAA(美国海洋和大气管理局)气象数据获取与POI点数据获取
    查看>>