首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MNIST和Fashion_MNIST叠加困难

MNIST和Fashion_MNIST叠加困难
EN

Stack Overflow用户
提问于 2021-06-10 01:49:37
回答 1查看 104关注 0票数 0

我知道这是基本的,对你们来说太简单了,但是我是一个初学者,需要你的帮助。我很难用CNN制作二进制分类器。我的最终目标是检查精度超过0.99

我同时导入MNIST和FASHION_MNIST来识别它是号码还是衣服。所以有两个类别。我想将0-60000归为0,60001-120000归为1.我将使用binary_crossentropy.

但我不知道如何从一开始就开始。首先,我如何使用vstackh堆栈来组合MNIST和FASHION_MNIST?

到目前为止,我就是这样尝试的

代码语言:javascript
复制
****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)****
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-10 02:52:23

首先,

它们是图像,所以最好把它们当作图像来对待,不要将它们重塑成向量。

现在是问题的答案。假设您有mnist_train_imagefashion_train_image,两者都有(60000, 28, 28)输入形状。

你想要做的是由两个部分组成,结合输入和目标。

首先是输入

正如您在这个问题中已经写过的,您可以像这样使用np.vstack

代码语言:javascript
复制
>>> train_image = np.vstack((fashion_train_image, mnist_train_image))
>>> train_image.shape
(120000, 28, 28)

但是,正如你应该已经注意到的,记住你是需要vstack还是dstack还是hstack都有点痛苦。我更喜欢用np.concatenate代替

代码语言:javascript
复制
>>> train_image = np.concatenate((fashion_train_image, mnist_train_image), axis=0)
>>> train_image.shape
(120000, 28, 28)

现在,不需要记住什么是vhd,您只需要记住要连接的轴(或维度),在这种情况下,它是第一个轴,意思是0。特别是在这种情况下,“垂直”是第二个轴,因为它是一堆图像,而第一个轴是“批处理”。

接下来,标签

因为您想将0-60000划分为0,60001-120000归为1,所以有很多奇特的方法可以做到这一点。

但是简单地说,您可以使用np.zeros创建一个填充了0的数组。你猜,np.ones会创建一个充满1的数组。但是由于oneszeros都给出了一个浮点数数组,我不确定这会不会成为一个问题,所以我在后面添加了.astype('uint8'),以防万一。您也可以在函数中添加参数dtype='uint8'

使用上面的级联

代码语言:javascript
复制
>>> train_labels = np.concatenate((np.zeros(60000), np.ones(60000))).astype('uint8')
>>> train_labels.shape
(120000,)

对整个大小使用1或0,并减去或添加或重新分配其余的

代码语言:javascript
复制
>>> train_labels = np.zeros(120000).astype('uint8')
>>> train_labels[60000:] = 1
#####
>>> train_labels = np.ones(120000, dtype='uint8')
>>> train_labels[:60000] -= 1

重要!

在您的例子中,关于标签有一个明显的错误,索引以0开头,所以第60000个索引是59,999。

所以你真正想要的是将0-59999归为0,60000-119999归为1。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67913601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档