4.6.0 头文件

import torch
from torch import nn
from d2l import torch as d2l
from matplotlib import pyplot as plt

 

4.6.1 定义损失函数

# 定义交叉熵损失函数
loss = nn.CrossEntropyLoss(reduction='none')

 

4.6.2 下载fashion_mnist数据集

# 定义批量大小
batch_size = 256
# 下载fashion_mnist,并对数据集进行打乱和按批量大小进行切割的操作,得到可迭代的训练集和测试集(训练集和测试集的形式都为(特征数据集合,数字标签集合))
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)

 

4.6.3 定义网络模型

# dropout1层的概率,dropout2层的概率
dropout1, dropout2 = 0.2, 0.5
net = nn.Sequential(nn.Flatten(),           # 展平层
        nn.Linear(784, 256),                # 全连接层
        nn.ReLU(),                          # relu激活函数
        # 在第一个全连接层之后添加一个dropout层
        nn.Dropout(dropout1),               # dropout层
        nn.Linear(256, 256),                # 全连接层
        nn.ReLU(),                          # relu激活函数
        # 在第二个全连接层之后添加一个dropout层
        nn.Dropout(dropout2),               # dropout层
        nn.Linear(256, 10))                 # 全连接层

 

4.6.4 初始化全连接层权重和偏移量

# 初始化全连接层权重和偏移量
def init_weights(m):
    if type(m) == nn.Linear:
        nn.init.normal_(m.weight, std=0.01)
net.apply(init_weights);

 

4.6.5 定义优化器

# 定义学习率
lr = 0.5
trainer = torch.optim.SGD(net.parameters(), lr=lr)

 

4.6.6 训练过程

# 定义训练轮数
num_epochs = 10
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)

 

4.6.7 训练结果可视化

plt.savefig('OutPut.png')

 

本小节完整代码如下

import torch
from torch import nn
from d2l import torch as d2l
from matplotlib import pyplot as plt

# ------------------------------定义损失函数------------------------------------

# 定义交叉熵损失函数
loss = nn.CrossEntropyLoss(reduction='none')

# # ------------------------------下载fashion_mnist数据集------------------------------------

# 定义批量大小
batch_size = 256
# 下载fashion_mnist,并对数据集进行打乱和按批量大小进行切割的操作,得到可迭代的训练集和测试集(训练集和测试集的形式都为(特征数据集合,数字标签集合))
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)

# ------------------------------定义网络模型------------------------------------

# dropout1层的概率,dropout2层的概率
dropout1, dropout2 = 0.2, 0.5
net = nn.Sequential(nn.Flatten(),           # 展平层
        nn.Linear(784, 256),                # 全连接层
        nn.ReLU(),                          # relu激活函数
        # 在第一个全连接层之后添加一个dropout层
        nn.Dropout(dropout1),               # dropout层
        nn.Linear(256, 256),                # 全连接层
        nn.ReLU(),                          # relu激活函数
        # 在第二个全连接层之后添加一个dropout层
        nn.Dropout(dropout2),               # dropout层
        nn.Linear(256, 10))                 # 全连接层

# ------------------------------初始化全连接层权重和偏移量------------------------------------

# 初始化全连接层权重和偏移量
def init_weights(m):
    if type(m) == nn.Linear:
        nn.init.normal_(m.weight, std=0.01)
net.apply(init_weights);

# ------------------------------定义优化器------------------------------------

# 定义学习率
lr = 0.5
trainer = torch.optim.SGD(net.parameters(), lr=lr)

# ------------------------------训练过程------------------------------------

# 定义训练轮数
num_epochs = 10
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)

# ------------------------------训练结果可视化------------------------------------

plt.savefig('OutPut.png')

 

posted on 2022-11-06 10:26  yc-limitless  阅读(126)  评论(0)    收藏  举报