ValueError。输入数组和目标数组的样本数应该相同。发现60000个输入样本和10000个目标样本

问题描述 投票:-1回答:1

我试图训练我的深度神经网络来识别手写数字,但我一直得到标题中所说的错误,它给我一个错误说。ValueError: 输入数组应该与目标数组有相同数量的样本。发现60000个输入样本和10000个目标样本。我怎样才能解决这个问题?(我已经尝试了 train_test_split 和 transport,但没有任何效果)

# Imports
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import to_categorical

 # Configuration options
 feature_vector_length = 784
 num_classes = 60000

 # Load the data
 (X_train, Y_train), (X_test, Y_test) = mnist.load_data()

 # Reshape the data - MLPs do not understand such things as '2D'.
 # Reshape to 28 x 28 pixels = 784 features
 X_train = X_train.reshape(X_train.shape[0], feature_vector_length)
 X_test = X_test.reshape(X_test.shape[0], feature_vector_length)

 # Convert into greyscale
 X_train = X_train.astype('float32')
 X_test = X_test.astype('float32')
 X_train /= 255
 X_test /= 255

 # Convert target classes to categorical ones
 Y_train = to_categorical(Y_train, num_classes)
 Y_test = to_categorical(Y_test, num_classes)

 # Load the data
 (X_train, Y_train), (X_test, Y_test) = mnist.load_data()

 # Visualize one sample
 import matplotlib.pyplot as plt
 plt.imshow(X_train[0], cmap='Greys')
 plt.show()

 # Set the input shape
 input_shape = (feature_vector_length,)
 print(f'Feature shape: {input_shape}')

# Create the model
# Using sigmoid instead of relu function
model = Sequential()
model.add(Flatten())
model.add(Dense(350, input_shape=input_shape, activation="sigmoid", 
kernel_initializer=init))
model.add(Dense(50, activation="sigmoid", kernel_initializer=init))
model.add(Dense(num_classes, activation="sigmoid", 
kernel_initializer=init))

# Configure the model and start training
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics= 
['accuracy'])
model.fit(X_train, Y_train, epochs=10, batch_size=250, verbose=1, 
validation_split=0.2)

# Test the model after training
test_results = model.evaluate(X_test, Y_test, verbose=1)
print(f'Test results - Loss: {test_results[0]} - Accuracy: 
{test_results[1]}%')
python tensorflow machine-learning keras deep-learning
1个回答
1
投票

如果你想解决你的问题,这里有一个解决方案。

# Imports
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Flatten
from keras.utils import to_categorical

 # Configuration options
feature_vector_length = 784
num_classes = 10

# Load the data
(X_train, Y_train), (X_test, Y_test) = mnist.load_data()

# Reshape the data - MLPs do not understand such things as '2D'.
# Reshape to 28 x 28 pixels = 784 features
# X_train = X_train.reshape(X_train.shape[0], feature_vector_length)
# X_test = X_test.reshape(X_test.shape[0], feature_vector_length)

# Convert into greyscale
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255

# Convert target classes to categorical ones
Y_train = to_categorical(Y_train, num_classes)
Y_test = to_categorical(Y_test, num_classes)



# Create the model
# Using sigmoid instead of relu function
model = Sequential()
model.add(Flatten())
model.add(Dense(350, input_shape=input_shape, activation="relu"))
model.add(Dense(50, activation="relu"))
model.add(Dense(num_classes, activation="softmax"))

# Configure the model and start training
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics= 
['accuracy'])
model.fit(X_train, Y_train, epochs=10, batch_size=250, verbose=1, 
validation_split=0.2)

# Test the model after training
test_results = model.evaluate(X_test, Y_test, verbose=1)

但你应该好好研究一下,了解你的代码中的每一行应该做什么 以及每个参数的含义。例如,选择 sigmoid 激活功能是错误的,特别是在最后一层是首先要了解的。这是你应该做研究的众多事情之一。然后是。

  1. 理解为什么以及何时重塑你的数据。
  2. 扁平化层的作用是什么
  3. 最重要的是,要明白什么是 num_classes 为什么是10而不是1000或60000?
© www.soinside.com 2019 - 2024. All rights reserved.