09 Softmax 回归 + 损失函数 + 图片分类数据集

编程入门 行业动态 更新时间:2024-10-08 20:36:37

09 Softmax 回归 + 损失<a href=https://www.elefans.com/category/jswz/34/1771370.html style=函数 + 图片分类数据集"/>

09 Softmax 回归 + 损失函数 + 图片分类数据集

练习Fashion-MNIST 数据集

和书上(Hands-on Machine Learning with Scikit-Learning)Chpater3的理论知识一样,可结合一起看,但是书上Chapter3的MNIST数据集根本不能导入

import torch
import torchvision
from torch.utils import data
from torchvision import transforms
from d2l import  torch as d2l
from sklearn.datasets import fetch_openml
import matplotlib as mpl
import matplotlib.pyplot as plt
import osd2l.use_svg_display()

由于最开始没有导入d2l.use_svg_display(),导致后面的Timer函数无法使用,报错

1.通过框架中的内置函数将FASHION-MNIST数据下载并读取到内存中

通过to tensor 把图像数据从pil类型变换成32位float ,再除以255,使得所有图像像素的数值都在 0到1 之间

trans = transforms.ToTensor() #把图片转成pytorch的tensor(最简单的预处理)
mnist_train = torchvision.datasets.FashionMNIST(root= '../data',train =True,transform=trans, download=True ) #从dataset里拿到train data,拿到的是pytorch的的tensor
mnist_test = torchvision.datasets.FashionMNIST(root='../data',train=False,transform=trans,download=True) #测试数据是用来模型好坏的数据集,不参与训练,train=Falseprint('Test data len:',len(mnist_test))
print('Train data len:',len(mnist_train))

打印的结果:

Test data len: 10000
Train data len: 60000
Fashion-MNIST由10个类别的图像组成, 每个类别由训练数据集(train dataset)中的6000张图像 和测试数据集(test dataset)中的1000张图像组成。
因此,训练集和测试集分别包含60000和10000张图像。 测试数据集不会用于训练,只用于评估模型性能。d

打印第一张图片:

print(mnist_train[0][0].shape) 
#torch.Size([1, 28, 28]),黑白图片,rgb的channel=1,图片的长和宽都是28
#打印第一张图片,即便minist_train[0][0]

2.定义可视化数据集的函数(这一步和上一次做人工数据集一样)

def get_fashion_mnist_labels(labels): #返回FASHION-MNIST数据集的文本标签text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat','sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']#数据集里有10个类别return [text_labels[int(i)]for i in labels]

3.我们现在可以创建一个函数来可视化这些样本。

def show_images(imgs,num_rows,num_cols,titles=None,scale=1.5):#用matplotlip来画图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())#图片张量tensorelse:#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#以下是训练数据集中前几个样本的图像及其相应的标签。
X,y = next(iter(data.DataLoader(mnist_train,batch_size = 18)))plt_img = show_images(X.reshape(18, 28, 28), 2, 9, titles=get_fashion_mnist_labels(y))
plt.show()

构造了pytorch的数据集以后,放进一个dataloader里,指定一个batch size,就会拿到一个大小为固定数字的,一个批量数据
用iter函数构造一个interate以后,用next获得第一个小批量,记为X和y
虽然数据发生了变化,但是和之前人工数据的练习本质一样
因为channel不用了,把X Reshape成一个number of examples,宽和高不变,还是28
在画图的时候画2行,每一行9张图片,每个图片的标号就是之前的label
之前图片显示不出因为没有plt.show()这一行代码,matplt画图函数不会用
 
#读取一小批量数据,大小为batch size
batch_size = 256def get_dataloader_workers():#定义了一个小函数,小函数返回的值是4,4是读取数据的进程数,自己选择大小return 4timer = d2l.Timer()
#用来测试速度的函数
for X,y in train_iter_py: #访问所有的batchcontinue
print(f'{timer.stop():2f} sec')
练习,使用不同的进程数,来看这个时间的变化
batch_size =256, return = 5, 2.793629 sec
batch_size =256, return = 55,12.512462 sec
*因为cpu的关系,Our suggested max number of worker in current system is 12
batch_size =256, return = 1,5.642448 sec

更多推荐

09 Softmax 回归 + 损失函数 + 图片分类数据集

本文发布于:2024-03-23 21:49:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1743238.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:函数   损失   数据   图片   Softmax

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!