前言
softmax和cross-entorpy
一、
import torch
import torchvision
from torch.utils import data
from torchvision import transforms
from d2l import torch as d2l
from torch import nn
# 处理anaconda和torch重复文件
import os
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
# 用svg显示图片
d2l.use_svg_display()
# 定义load_data_fashion_mnist函数,用于获取和读取Fashion-MNIST数据集。 这个函数返回训练集和验证集的数据迭代器。 此外,这个函数还接受一个可选参数resize,用来将图像大小调整为另一种形状。
# 通过ToTensor实例将图像数据从PIL类型变换成32位浮点数格式,
# 并除以255使得所有像素的数值均在0~1之间
def load_data_fashion_mnist(batch_size, resize=None):
"""下载Fashion-MNIST数据集,然后将其加载到内存中"""
trans = [transforms.ToTensor()] # 把图片转换为pytorch tensor
if resize:
trans.insert(0, transforms.Resize(resize))
trans = transforms.Compose(trans)
mnist_train = torchvision.datasets.FashionMNIST(
# 这里是fashion mnist下载后存的位置
root="D:/python_project/fashion-mnist-master/fashion-mnist-master/data/fashion",
train=True,
transform=trans,
download=False
)
mnist_test = torchvision.datasets.FashionMNIST(
root="D:/python_project/fashion-mnist-master/fashion-mnist-master/data/fashion",
train=False,
transform=trans,
download=False
)
return (data.DataLoader(mnist_train, batch_size, shuffle=True,
num_workers=get_dataloader_workers()),
data.DataLoader(mnist_test, batch_size, shuffle=False,
num_workers=get_dataloader_workers()))
# print(mnist_train[0][0].shape) # 黑白图片channel=1
def get_fashion_mnist_labels(labels):
"""返回Fashion-MNIST数据集的文本标签"""
text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat',
'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']
return [text_labels[int(i)] for i in labels]
def show_images(imgs, num_rows, num_cols, titles=None, scale=1.5): # @save
"""绘制图像列表"""
figsize = (num_cols * scale, num_rows * scale)
_, axes = d2l.plt.subplots(num_rows, num_cols, figsize=figsize)
axes = axes.flatten()
for i, (ax, img) in enumerate(zip(axes, imgs)):
if torch.is_tensor(img):
# 图片张量
ax.imshow(img.numpy())
else:
# PIL图片
ax.imshow(img)
ax.axes.get_xaxis().set_visible(False)
ax.axes.get_yaxis().set_visible(False)
if titles:
ax.set_title(titles[i])
return axes
def get_dataloader_workers(): # @save
"""使用4个进程来读取数据"""
return 4
# 展示图片
# X, y = next(iter(data.DataLoader(mnist_train, batch_size=18)))
# show_images(X.reshape(18, 28, 28), 2, 9, titles=get_fashion_mnist_labels(y))
# plt.show()
# 把数据读入迭代器
batch_size = 256
train_iter,test_iter = load_data_fashion_mnist(batch_size)
# softmax回归的输出层是一个全连接层。在Sequential中添加一个带有10个输出的全连接层。
# 在线性层前定义了展平层(flatten),来调整网络输入的形状
net = nn.Sequential(nn.Flatten(), nn.Linear(784, 10))
def init_weights(m):# m表示当前layer
# 以均值0和标准差0.01随机初始化权重
if type(m) == nn.Linear:
nn.init.normal_(m.weight, std=0.01)
net.apply(init_weights) # net进行初始化
# loss
loss = nn.CrossEntropyLoss()
# 优化
trainer = torch.optim.SGD(net.parameters(), lr=0.1) # parameters包含weights和bias
num_epochs = 10
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)
d2l.plt.show()
显示图片在pycharm上需要在Animator类中add函数加上花圈的两行。(ctrl+左键对准train_ch3,然后ctrl+f找到animator类)
文章来源:https://www.toymoban.com/news/detail-518133.html
来源
b站 跟李沐学AI 动手学深度学习v2 09文章来源地址https://www.toymoban.com/news/detail-518133.html
到了这里,关于(4)深度学习学习笔记-Softmax的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!