如何解决堆叠 MNIST 和 Fashion_MNIST 的困难 使用上面的连接对整个大小使用 1 或 0,然后减去或添加或重新分配其余部分
我知道这对你们来说很基本而且太容易了,但我是一个需要你们帮助的初学者。 我正在努力用 CNN 制作二元分类器。 我的最终目标是检查精度超过 0.99
我同时导入 MNIST 和 FASHION_MNIST 以识别它是号码还是服装。 所以有2个类别。我想将 0-60000 归类为 0,将 60001-120000 归类为 1。 我将使用 binary_crossentropy。
但我不知道如何从头开始。 一开始怎么用vstack hstack把MNIST和FASHION_MNIST结合起来?
到目前为止我就是这样尝试的
****import numpy as np
from keras.datasets import mnist
from keras.datasets import fashion_mnist
import keras
import tensorflow as tf
from keras.utils.np_utils import to_categorical
num_classes = 2
train_images = train_images.astype("float32") / 255
test_images = test_images.astype("float32") / 255
train_images = train_images.reshape((-1,784))
test_images = test_images.reshape((-1,784))
train_labels = to_categorical(train_labels,num_classes)
test_labels = to_categorical(test_labels,num_classes)****
解决方法
首先
它们是图像,因此最好将它们视为图像,而不是将它们重塑为矢量。
现在问题的答案。假设您有 mnist_train_image
和 fashion_train_image
,它们都有 (60000,28,28)
输入形状。
你要做的是由两部分组成,结合输入和制定目标。
首先输入
正如您已经在问题中所写,您可以像这样使用 np.vstack
>>> train_image = np.vstack((fashion_train_image,mnist_train_image))
>>> train_image.shape
(120000,28)
但是正如您应该已经注意到的那样,记住您是否需要 vstack
或 dstack
或 hstack
有点痛苦。我更喜欢用 np.concatenate
代替
>>> train_image = np.concatenate((fashion_train_image,mnist_train_image),axis=0)
>>> train_image.shape
(120000,28)
现在不需要记住鸭子是什么 v
或 h
或 d
,您只需要记住要连接的轴(或维度),在这种情况下,它是第一个轴,表示 0。特别是在这种情况下,“垂直”是第二个轴,因为它是一堆图像,第一个轴是“批次”。
接下来是标签
由于您想将 0-60000 归类为 0,将 60001-120000 归类为 1,因此有很多奇特的方法可以做到这一点。
但简而言之,您可以使用 np.zeros
创建一个填充为 0 的数组。您猜对 np.ones
可以创建一个填充为 1 的数组。但是作为两个 ones
和 zeros
给你一个浮点数组,我不确定这是否会成为一个问题,所以我在后面添加了 .astype('uint8')
以防万一。您也可以在函数中添加参数 dtype='uint8'
。
使用上面的连接
>>> train_labels = np.concatenate((np.zeros(60000),np.ones(60000))).astype('uint8')
>>> train_labels.shape
(120000,)
对整个大小使用 1 或 0,然后减去或添加或重新分配其余部分
>>> train_labels = np.zeros(120000).astype('uint8')
>>> train_labels[60000:] = 1
#####
>>> train_labels = np.ones(120000,dtype='uint8')
>>> train_labels[:60000] -= 1
重要!!!!
您的示例中有一个关于标签的明显错误,索引从 0 开始,因此第 60,000 个索引是 59,999。
所以你真正想要的是将 0-59999 归类为 0,将 60000-119999 归类为 1。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。