PyTorch实战:全连接网络拟合简单函数
创作时间:
2025-01-21 18:42:07
作者:
@小白创作中心
PyTorch实战:全连接网络拟合简单函数
使用神经网络拟合简单函数是理解神经网络工作原理的一个很好的起点。本文将通过一个具体的实例,展示如何使用PyTorch实现全连接网络来拟合二次函数y = x^2。
代码实现
下面是完整的代码示例:
import torch
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt
# 生成数据
x = torch.linspace(-10, 10, 100).unsqueeze(1)
y = x**2
# 定义全连接网络
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(1, 128)
self.fc2 = nn.Linear(128, 64)
self.fc3 = nn.Linear(64, 1)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = torch.relu(self.fc2(x))
x = self.fc3(x)
return x
# 实例化模型、损失函数和优化器
model = SimpleNN()
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.01)
# 训练模型
num_epochs = 1000
for epoch in range(num_epochs):
model.train()
optimizer.zero_grad()
outputs = model(x)
loss = criterion(outputs, y)
loss.backward()
optimizer.step()
if (epoch+1) % 100 == 0:
print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')
# 预测
model.eval()
predicted = model(x).detach()
# 可视化结果
plt.plot(x.numpy(), y.numpy(), 'ro', label='Original data')
plt.plot(x.numpy(), predicted.numpy(), 'b-', label='Fitted line')
plt.legend()
plt.show()
代码解析
这段代码的具体步骤如下:
- 生成数据:创建输入数据 ( x ) 和对应的标签 ( y )。
- 定义网络结构:创建一个简单的全连接神经网络,包括三层线性层。
- 实例化模型、损失函数和优化器:使用均方误差损失函数和Adam优化器。
- 训练模型:在1000个epoch上训练模型,并在每100个epoch打印一次损失。
- 预测和可视化:使用训练好的模型进行预测,并将原始数据和拟合结果进行可视化。
运行这段代码后,你将看到一个图形,其中红点表示原始的二次函数数据,蓝线表示神经网络拟合的结果。
热门推荐
彝族文学评论家:文学发展的幕后推手
解码高情商:从心理学视角看情绪智慧
IBM调研揭示:CEO如何用情商领导团队?
《好人脉是处出来的》:高情商交友的六大关键
高情商助你职场C位出道!
数学试卷的文字陷阱,你踩雷了吗?
青城后山:成都人的周末徒步天堂
风热牙痛?中医偏方来帮忙!
牙疼是脾阴虚吗?中医教你这样治
扁鹊教你古法治牙痛
2025年1月天文观测指南:火星冲日、金星大距、六颗行星连珠等精彩天象
行政处罚的立案程序有哪些
氮化镓(GaN)是什么?为什么它如此重要?
手机充电器为何选氮化镓,看完我悟了
氮化镓(GaN)是什么?为什么它如此重要?
打卡新海港:琼州海峡最便捷过海体验
新海港春运自驾攻略:路线、购票、进港全指南
海口新海港“二线口岸”即将交付使用!
电子产品过度使用:孩子心理健康的隐形杀手?
双十一餐桌礼仪大揭秘:如何优雅用餐?
孔子餐桌礼仪:从饮食规范到文化传承
静物摄影中背景和灯光的选择
全球第三!西安交大一附院成功实施自主呼吸麻醉下双肺移植手术
信息技术为肺移植插上科技翅膀
用情绪价值点亮亲子关系
从4亿到14亿:鸦片战争后中国家庭数量的变迁
核心家庭变少了?三代同堂才是王道?
荷花那么好看,当然是要全吃掉啊!
《放不下的手机》:被手机控制了不要怕,教你夺回主动权
甲状腺结节的治疗方法有9种?