ValueError: Ошибка при проверке ввода: ожидалось, что dens_10_input имеет 2 измерения, но получил массив с формой (60000, 28, 28) - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь обучить свою глубокую нейронную сеть распознавать рукописные числа, но я продолжаю получать ошибку, указанную ранее в заголовке. Это дает мне ошибку, говорящую: «ValueError: Ошибка при проверке ввода: ожидается, что плотность 2 измерения, но получил массив с формой (60000, 28, 28) ", и я не знаю почему. Я проверил предыдущие ответы на эту проблему, но ничего не помогло. Новое : Поэтому, когда я пытаюсь выполнить последний фрагмент кода, он выдает мне эту ошибку: ValueError: Входные массивы должны иметь то же количество выборок, что и целевые> массивы. Найдено 60000 входных и 10000 целевых образцов.

введите описание изображения здесь

# 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)

# 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()

# 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
model = Sequential()
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)

# New one #######
# 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]}%')

1 Ответ

0 голосов
/ 28 апреля 2020

Я взглянул на твой код и заставил его работать. Я добавил плоский слой, который превратил бы входные данные в жизнеспособный формат. Я также использую tenorflow.keras вместо keras, потому что эта версия, на мой взгляд, лучше, но вы можете использовать ее с обоими. У вас также были проблемы с вашими типами, поэтому я изменил ваши X_train и X_test на numpy массивы типа float32.

# Imports
import tensorflow
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.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)

# Imports
import tensorflow
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Flatten
from tensorflow.keras.utils import to_categorical
import numpy as np
# Configuration options
feature_vector_length = 784
num_classes = 60000

# 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}')
X_train=np.array(X_train,dtype="float32")
X_test=np.array(X_train,dtype="float32")
# Create the model
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)


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...