使用PyTorch构建深度神经网络
立即解锁
发布时间: 2025-09-06 00:06:02 阅读量: 3 订阅数: 40 AIGC 

# 使用PyTorch构建深度神经网络
在深度学习中,使用PyTorch构建深度神经网络时,许多因素会影响模型的性能,如Sigmoid函数特性、批量大小、损失优化器、隐藏层数量和批量归一化等。下面将详细探讨这些因素。
## 1. Sigmoid函数特性
### 1.1 权重值与Sigmoid输出的关系
| 权重情况 | Sigmoid输出变化 |
| --- | --- |
| 权重值大于0.1 | Sigmoid值基本不随权重增加而变化 |
| 权重值极小 | Sigmoid值变化微小,需极小幅度改变权重才能使Sigmoid值变化 |
| 输入值小 | Sigmoid值变化明显 |
原因在于,大负数值(权重乘以大数)的指数接近0,而权重乘以缩放后的输入时指数值会变化。
### 1.2 可视化理解

## 2. 批量大小的影响
### 2.1 不同批量大小的对比
| 批量大小 | 每轮权重更新次数 | 训练和验证数据的损失与准确率 |
| --- | --- | --- |
| 32 | 1875次(60000/32) | 5个epoch后,训练和验证准确率约为85% |
| 10000 | 6次(60000/10000) | 准确率和损失值未达到批量大小为32时的水平 |
### 2.2 批量大小为32时的代码实现
```python
# 1. 下载并导入训练图像和目标
# 2. 下载并导入验证数据集
val_fmnist = datasets.FashionMNIST(data_folder, download=True, train=False)
val_images = val_fmnist.data
val_targets = val_fmnist.targets
# 3. 导入相关包并定义设备
# 4. 定义数据集类和相关函数
# 5. 定义获取数据的函数
def get_data():
train = FMNISTDataset(tr_images, tr_targets)
trn_dl = DataLoader(train, batch_size=32, shuffle=True)
val = FMNISTDataset(val_images, val_targets)
val_dl = DataLoader(val, batch_size=len(val_images), shuffle=False)
return trn_dl, val_dl
# 6. 定义计算验证数据损失的函数
@torch.no_grad()
def val_loss(x, y, model):
model.eval()
prediction = model(x)
val_loss = loss_fn(prediction, y)
return val_loss.item()
# 7. 获取训练和验证数据加载器,初始化模型、损失函数和优化器
trn_dl, val_dl = get_data()
model, loss_fn, optimizer = get_model()
# 8. 训练模型
train_losses, train_accuracies = [], []
val_losses, val_accuracies = [], []
for epoch in range(5):
print(epoch)
train_epoch_losses, train_epoch_accuracies = [], []
for ix, batch in enumerate(iter(trn_dl)):
x, y = batch
batch_loss = train_batch(x, y, model, optimizer, loss_fn)
train_epoch_losses.append(batch_loss)
train_epoch_loss = np.array(train_epoch_losses).mean()
for ix, batch in enumerate(iter(trn_dl)):
x, y = batch
is_correct = accuracy(x, y, model)
train_epoch_accuracies.extend(is_correct)
train_epoch_accuracy = np.mean(train_epoch_accuracies)
for ix, batch in enumerate(iter(val_dl)):
x, y = batch
val_is_correct = accuracy(x, y, model)
validation_loss = val_loss(x, y, model)
val_epoch_accuracy = np.mean(val_is_correct)
train_losses.append(train_epoch_loss)
train_accuracies.append(train_epoch_accuracy)
val_losses.append(validation_loss)
val_accuracies.append(val_epoch_accuracy)
# 9. 可视化训练和验证数据集的准确率和损失值随epoch的变化









