如何 select 来自 mnist.load_data() 的所需训练样本

How to select a desired training sample from mnist.load_data()

这里是机器学习的新手。我正在尝试训练 1000 对训练数据和 500 对测试数据而不是整个数据集。但是,我收到错误消息:

"ValueError: Error when checking target: expected activation_24 to have shape (10,) but got array with shape (1,)"

以下是我与数据相关的部分代码:

# load data
(X_train, y_train), (X_test, y_test) = mnist.load_data()

X_train = X_train / 255
X_test = X_test / 255

X_train = X_train.reshape(-1,1,28,28) 
X_train = X_train[:1000,:,:]
X_test = X_test[:500,:,:]


y_train = y_train[:1000]
y_test  = y_test[:500]

X_test = np.array(X_test)
X_test = X_test.reshape(-1,1,28,28) 

print('X_train shape: ',X_train.shape)
print('X_test shape: ',np.shape(X_test ))
print('y_train shape: ',y_train.shape)
print('y_test shape: ',np.shape(y_test ))

输出:

X_train 形状:(1000, 1, 28, 28) X_test 形状:(500, 1, 28, 28) y_train 形状:(1000,) y_test 形状:(500,)

我在这方面做得对吗?还有其他方法可以实现目标吗? 提前致谢

X_train 不应该是形状 (1000, 1, 28, 28)。

使用 Keras 的 "channels_last" 格式,你的数据形状应该是 (Batch x Height x Width x Channel) 所以 (1000,28,28,1)。

看看这个例子:https://keras.io/examples/mnist_cnn/

从训练集中取前 1000 个,从测试集中取前 500 个只需要这样:

X_train = X_train[:1000].reshape(1000,28,28,1)
y_train = y_train[:1000].reshape(1000,1)

X_test = X_test[:500].reshape(500,28,28,1)
y_test = y_test[:500].reshape(500,1)

Keras 默认使用最后一个通道,因此 (batch, 28, 28, 1)。 对于 y,数据需要从 (batch,) 整形为 (batch,1)。 您还可以使用 [:batch] 从第一维获取元素,并在同一行上进行整形。