深度学习ap代码
时间: 2025-03-08 20:03:07 浏览: 21
深度学习 API 代码示例
使用 PyTorch 创建简单神经网络
下面展示的是利用 PyTorch 这一强大的机器学习库来构建并训练一个基础的全连接神经网络的例子。此例子不仅涵盖了模型定义,还包括了如何指定损失函数以及优化算法的选择。
import torch
from torch import nn, optim
from torch.utils.data import DataLoader, TensorDataset
# 定义简单的两层神经网络结构
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(784, 256) # 输入维度为784(假设输入图像大小为28*28),隐藏层有256个节点
self.relu = nn.ReLU()
self.fc2 = nn.Linear(256, 10) # 输出类别数设为10
def forward(self, x):
out = self.fc1(x)
out = self.relu(out)
out = self.fc2(out)
return out
model = SimpleNN()
criterion = nn.CrossEntropyLoss() # 设置交叉熵作为损失计算方式
optimizer = optim.SGD(model.parameters(), lr=0.01) # 配置随机梯度下降法作为参数更新方法
# 假设有如下形式的数据加载器
train_loader = DataLoader(TensorDataset(torch.randn(60000, 784), torch.randint(0, 10, (60000,))), batch_size=64)
for epoch in range(5): # 训练五个周期
running_loss = 0.0
for data, target in train_loader:
optimizer.zero_grad() # 清除之前的梯度信息
output = model(data) # 执行一次前向传播得到预测结果
loss = criterion(output, target) # 根据真实标签与预测值之间的差异计算当前批次上的平均损失
loss.backward() # 反向传播求解各权重对应的梯度
optimizer.step() # 更新所有可训练参数
running_loss += loss.item()
print('Finished Training') # 当完成全部迭代后打印提示消息
上述代码片段演示了一个完整的深度学习工作流,从数据准备到最终模型评估[^2]。
动手学深度学习中的线性回归实现
另一个常见的应用场景是在《动手学深度学习》这本书里提到过的线性回归问题。这里给出一段基于该书内容改编而成的具体实践案例:
import numpy as np
import matplotlib.pyplot as plt
from mxnet import autograd, nd, gluon
from mxnet.gluon import data as gdata, loss as gloss, nn
def synthetic_data(w, b, num_examples):
"""生成 y = Xw + b + 噪声"""
X = nd.random.normal(scale=1, shape=(num_examples, len(w)))
y = nd.dot(X, w) + b
y += nd.random.normal(scale=0.01, shape=y.shape)
return X.astype(np.float32), y.reshape((-1, 1)).astype(np.float32)
true_w = nd.array([2, -3.4])
true_b = 4.2
features, labels = synthetic_data(true_w, true_b, 1000)
batch_size = 10
dataset = gdata.ArrayDataset(features, labels)
data_iter = gdata.DataLoader(dataset, batch_size, shuffle=True)
net = nn.Sequential()
net.add(nn.Dense(1))
net.initialize()
loss = gloss.L2Loss() # 平方损失也称为L2范数损失
trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 0.03})
num_epochs = 3
for epoch in range(num_epochs):
for X, y in data_iter:
with autograd.record():
l = loss(net(X), y)
l.backward()
trainer.step(batch_size)
l = loss(net(features), labels)
print(f'epoch {epoch + 1}, loss: {l.mean().asnumpy()}')
dense = net[0]
print(f'误差较小:w的真实值是{true_w.T},估计值是{dense.weight.data()},b的真实值是{true_b},估计值是{dense.bias.data()}')
通过这段代码可以了解如何使用 MXNet Gluon 接口快速搭建起一个用于解决线性拟合任务的小型框架,并观察其性能表现[^1]。
相关推荐











