MNIST数据集(28, 28)到(28, 28, 3)

13 篇文章 0 订阅
6 篇文章 0 订阅

一、从下载数据集开始说起

from keras.datasets import mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()

通过上面代码下来的数据集的数据的shape是:

print(x_train.shape)
(60000, 28, 28)

print(y_train.shape)
(60000, 10)

print(x_test.shape)
(10000, 28, 28)

print(y_test.shape)
(10000, 10)

查过很多篇文章,几乎都是(28,28)变成(784,4)然后用全连接网络进行分类。而如果想要卷积神经网路来进行手写数据集的分类时,大多数时候传入网络的图像通道数都为3,那么这时候就需要把(60000,28,28)变为(60000,28,28,3)。然而这个变换过程怎么实现呢?
二、(28,28)变为(28,28,3)
我倒腾出来的方法有两个:
(1)首先是将(28,28)通过reshape,变为(28,28,1),再通过concatenate进行拼接;
(2)直接通过np.stack方法实现。这种方法是和别人交流得知。

import numpy as np
#方法(1)
x_281 = x_train.reshape(len(x_train), 28,28,1)
x_283 = np.concatenate((x_281, x_281, x_281), axis=-1)#注意,concatenate方法只能用于数据类型为整型的np数组
方法(2)
x_s283 = np.stack((x_train, x_train, x_train), axis=3)

需要注意的是两个方法的axis参数,一个是aixs=-1,一个是axis=3。至于这两种方法的使用说明,以及axis参数传入不同的值得到不同的shape,现在还没搞清楚,留个空白以后补充。
##############################################################
2020年6月17日23:01:56
这个空白可以现在补了。
比如说一个numpy数组的维度是(28,28,1),分别是第0个维度,第1个维度,第3个维度,如果是从最后一个维度开始数,分别是第-3个维度,第-2个维度,第-1个维度。

所以axis就是指定拼接是在哪个维度进行的。
总之我是理解了,不过表述不是很清楚。
还有一点,stack要求所有维度都要一样。

2020年6月27日 再更

原来x_train的维度是(60000, 28, 28),第0个维度是60000,第1个维度是28,第2个维度是28。
x_283 = np.stack((x_train, x_train, x_train), axis=3),得到的x_283的维度是(60000, 28, 28, 3)。
此时第0个维度是60000,第1个维度是28,第2个维度是28,第3个维度是3。过程差不多是像下面这张图:
在这里插入图片描述

##############################################################

结果查看:

import matplotlib.pyplot as plt

plt.figure(figsize=(10,4))
plt.subplot(1, 3, 1)
plt.imshow(x_train[0])
plt.legend('x_train[0]')
plt.xlabel('x_train[0]')
plt.title('x_train[0]')

plt.subplot(1, 3, 2)
plt.imshow(x_283[0])
plt.legend('x_283[0]')
plt.xlabel('x_283[0]')
plt.title('x_283[0]')

plt.subplot(1, 3, 3)
plt.imshow(x_s283[0])
plt.legend('x_s283[0]')
plt.xlabel('x_s283[0]')
plt.title('x_s283[0]')

plt.show()

在这里插入图片描述
三、结果分析
从结果查看的结果来看,把(28,28)到(28,28,3)的两种方法是可行的。

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 好的,我会用中文回答你的问题。 MNIST是一个用来训练和测试手写数字识别模型的数据集。它包含了60,000个训练数据和10,000个测试数据,每个数据都是28*28像素的手写数字图片和对应的数字标签。 训练MNIST数据集的代码的基本流程如下: 1. 导入必要的库,包括TensorFlow和MNIST数据集的加载器。 2. 加载MNIST数据集。这一步会将数据集的图片和标签加载到内存中。 3. 定义模型。这一步可以使用TensorFlow中的各种函数和层来构建模型的架构。 4. 定义损失函数和优化器。在训练过程中,模型会根据损失函数来调整参数,使得模型的预测结果越来越准确。 5. 训练模型。在训练过程中,模型会对训练数据进行预测,并使用优化器来调整参数,使得损失函数的值越来越小。 6. 评估模型。使用测试数据对模型进行评估,看看模型在测试数据上的表现如何。 7. 部署模型。将训练好的模型部署到线上环境中, ### 回答2: 要成功地训练并部署MNIST数据集的代码,需要经过以下步骤: 1. 数据准备:首先,需要获取MNIST数据集,该数据集包含了60000个手写数字的图像和对应的标签,可以从官方网站或者其他开源资源下载。将数据集划分为用于训练的训练集和用于评估的测试集。 2. 构建模型:使用一个合适的深度学习框架,如TensorFlow,构建一个适当的模型。对于MNIST数据集,可以使用卷积神经网络(CNN)或者其他适当的模型结构。 3. 训练模型:使用训练集对模型进行训练。在每个训练步骤中,将一批图像输入模型进行预测,并计算预测结果与真实标签之间的损失。然后使用反向传播算法来更新模型的权重,以最小化损失函数。 4. 评估模型:使用测试集对训练好的模型进行评估。将测试集的图像输入到模型中进行预测,然后与真实标签进行比较,计算模型的准确率和其他评估指标。 5. 模型部署:将训练好的模型部署到实际应用中。可以将模型保存为一个文件,然后在新的环境中加载它,并使用新的图像进行预测。 在整个过程中,可以使用各种工具和库来方便地进行数据处理、模型构建、训练和部署,如Python编程语言、TensorFlow深度学习框架等。此外,可以通过参考开源代码和文档,结合自己的理解和实践进行调试和优化,最终实现MNIST数据集代码的训练和部署成功。 ### 回答3: bhel28@163.com的MNIST数据集的训练和部署成功是一个相对复杂且需要一些步骤的过程。下面是一个大致的步骤: 1. 数据准备:首先,需要从MNIST数据集中获取训练集和测试集数据MNIST是一个手写数字图像数据集,包含大量的手写数字图片和对应的标签。可以使用Python库(如tensorflow)来下载和加载这些数据。 2. 数据预处理:在训练之前,需要对数据进行预处理。这可能包括将图像转换为灰度图像、调整图像大小、进行标准化等操作。这些预处理步骤有助于提高模型的准确性和性能。 3. 模型选择与训练:选择适合的模型架构是很关键的,可以选择使用卷积神经网络(CNN)等深度学习模型。在训练之前,需要将训练集数据拆分为训练集和验证集,用于评估模型性能。使用训练集来训练模型,通过反向传播算法调整模型的权重和偏置,以最小化损失函数。 4. 模型评估与调优:在训练过程中,可以定期评估模型的表现并进行调优。可以使用验证集数据来评估模型的准确性和损失值,并根据需要修改模型的超参数(如学习率、批量大小等)。 5. 模型部署:在训练和调优结束后,可以使用测试集数据来评估模型的最终性能。若结果满意,可以将模型部署到实际应用中。部署可以通过将模型导出为可执行文件、使用轻量级框架(如Tensorflow Lite)进行部署,或将模型集成到其他应用程序或设备中实现。 总之,bhel28@163.com要成功训练和部署MNIST数据集的代码,需要通过数据准备、数据预处理、模型选择与训练、模型评估与调优等步骤来完成。这些步骤需要使用合适的库和工具,并根据需要进行调整和修改,以达到预期的结果和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值