MATLAB深度学习工具的MNIST数据集与预训练LSTM网络

需积分: 27 12 下载量 153 浏览量 更新于2024-11-30 收藏 31.58MB ZIP 举报
资源摘要信息:"MNIST数据集是一个包含了手写数字图片的大规模数据集,广泛用于训练各类图像处理系统。这个数据集中的图片为灰度图,大小为28x28像素,包含了从0到9的手写数字,总计有60,000张训练图片和10,000张测试图片。在深度学习领域,MNIST数据集经常被用作入门级的数据集,因为它比较简单、干净且容易理解。 这个特定的数据集文件名为'mnist_data_set.zip',说明这是一个压缩文件,解压后会包含MATLAB所需的.mat格式文件。MATLAB是一种高性能的数值计算和可视化软件,它在工程计算、算法开发、数据可视化和数据分析等领域有广泛应用。MATLAB的深度学习工具箱提供了用于构建、训练和部署深度神经网络的函数和应用。 数据集中的描述还提到了一个训练好的长短期记忆(LSTM)网络。LSTM网络是一种特殊的循环神经网络(RNN),适合处理和预测序列数据中的重要事件,比如时间序列数据、语音识别和自然语言处理。LSTM网络通过其设计避免了传统RNN在长序列上的梯度消失问题,能够学习长期依赖信息,因此在处理具有时间序列特性的数据时表现优异。 在提供的文件列表中,'test.m'文件很可能是MATLAB的脚本文件,该脚本可以用来测试或演示网络如何使用MNIST数据集进行预测和评估。'data.zip'应该是包含数据集本身(即图片数据和标签)的压缩文件,解压后可以得到实际用于训练和测试的图片和标签数据。'readme.txt'文件通常包含了数据集和网络的使用说明或简要描述。'net.zip'文件包含了训练好的LSTM网络模型,解压后可以用来直接进行预测或进一步的学习和分析。 对于使用MATLAB进行深度学习的研究者和开发者而言,此数据集提供了一个便捷的起点。他们可以使用这个训练好的LSTM网络作为基础模型,对模型进行微调(fine-tuning)或用于其他相关的研究任务。同时,通过使用MNIST数据集进行实验,开发者可以熟悉深度学习的基本概念和工作流程,为处理更复杂的实际问题打下坚实的基础。"

import torch import torchvision from torch.utils import data from torchvision import transforms from d2l import torch as d2l import matplotlib.pyplot as plt d2l.use_svg_display() #通过ToTensor实例将图像数据从PIL类型变换成32位浮点数格式 #并除以255使得所有像素的数值均在0-1之间 trans = transforms.ToTensor() mnist_train = torchvision.datasets.FashionMNIST( root = r"E:\py\python\test\deep learning\data",train=True,transform=trans,download=True ) mnist_test = torchvision.datasets.FashionMNIST( root = r"E:\py\python\test\deep learning\data",train=False,transform=trans,download=True ) print(len(mnist_train),len(mnist_test)) print(mnist_train[0][0].shape) def get_fashion_mnist_labels(labels): #@save """返回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.subplot(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 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)); 这段代码运行不出来

2023-07-15 上传

import tensorflow as tf from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPool2D, Dropoutfrom tensorflow.keras import Model​# 在GPU上运算时,因为cuDNN库本身也有自己的随机数生成器,所以即使tf设置了seed,也不会每次得到相同的结果tf.random.set_seed(100)​mnist = tf.keras.datasets.mnist(X_train, y_train), (X_test, y_test) = mnist.load_data()X_train, X_test = X_train/255.0, X_test/255.0​# 将特征数据集从(N,32,32)转变成(N,32,32,1),因为Conv2D需要(NHWC)四阶张量结构X_train = X_train[..., tf.newaxis]    X_test = X_test[..., tf.newaxis]​batch_size = 64# 手动生成mini_batch数据集train_ds = tf.data.Dataset.from_tensor_slices((X_train, y_train)).shuffle(10000).batch(batch_size)test_ds = tf.data.Dataset.from_tensor_slices((X_test, y_test)).batch(batch_size)​class Deep_CNN_Model(Model):    def __init__(self):        super(Deep_CNN_Model, self).__init__()        self.conv1 = Conv2D(32, 5, activation='relu')        self.pool1 = MaxPool2D()        self.conv2 = Conv2D(64, 5, activation='relu')        self.pool2 = MaxPool2D()        self.flatten = Flatten()        self.d1 = Dense(128, activation='relu')        self.dropout = Dropout(0.2)        self.d2 = Dense(10, activation='softmax')        def call(self, X):    # 无需在此处增加training参数状态。只需要在调用Model.call时,传递training参数即可        X = self.conv1(X)        X = self.pool1(X)        X = self.conv2(X)        X = self.pool2(X)        X = self.flatten(X)        X = self.d1(X)        X = self.dropout(X)   # 无需在此处设置training状态。只需要在调用Model.call时,传递training参数即可        return self.d2(X)​model = Deep_CNN_Model()loss_object = tf.keras.losses.SparseCategoricalCrossentropy()optimizer = tf.keras.optimizers.Adam()​train_loss = tf.keras.metrics.Mean(name='train_loss')train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='train_accuracy')test_loss = tf.keras.metrics.Mean(name='test_loss')test_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='test_accuracy')​# TODO:定义单批次的训练和预测操作@tf.functiondef train_step(images, labels):       ......    @tf.functiondef test_step(images, labels):       ......    # TODO:执行完整的训练过程EPOCHS = 10for epoch in range(EPOCHS)补全代码

2023-06-13 上传