#python #numpy #tensorflow #google-colaboratory #reshape
#python #numpy #тензорный поток #google-colaboratory #изменить
Вопрос:
У меня есть набор обучающих данных с размерами (32, 32, 3, 10000), набор данных для тестирования с размерами (32, 32, 3, 1000). Я пытаюсь построить модель cnn для прогнозирования изображения. Я попробовал нижеприведенную архитектуру.
model = keras.Sequential(layers = [
keras.layers.Conv2D(32, kernel_size = (3,3), input_shape=(32,32,3)),
keras.layers.Conv2D(32, kernel_size = (3,3), padding='same',activation='relu'),
keras.layers.MaxPool2D(pool_size=(2,2), strides=2, padding='valid'),
keras.layers.Flatten(),
keras.layers.Dense(units = 32, activation='relu'),
keras.layers.Dense(units = 32, activation='softmax')
])
model.compile(optimizer='adam', loss = 'sparse_categorical_crossentropy', metrics=['acc'])
history = model.fit(train_images, train_label, batch_size=10, epochs=3, verbose=1, validation_data=(test_images, test_label))
Тогда это выдает мне ошибку
ValueError: Data cardinality is ambiguous:
x sizes: 32
y sizes: 10000
Please provide data which shares the same first dimension.
Затем я попытался изменить структуру и тестовые данные, изменив строку подгонки, как показано ниже
history = model.fit(train_images.reshape(10000,32,32,3), train_label, batch_size=10, epochs=5, verbose=1, validation_data=(test_images.reshape(1000,32,32,3), test_label))
Затем программа запускается, но я смущен тем, что когда я попытался построить изображение из набора данных, оно отображается, как показано ниже.
Что не так с изменением формы набора данных? Как я могу создать модель cnn с этим набором данных?
Ответ №1:
Вам нужно транспонировать, а не изменять форму:
train_images.transpose([3, 0, 1, 2])
Reshape берет все ваши данные оптом и начинает изменять количество элементов в каждом измерении. Транспонирование изменяет иерархию измерений, но сохраняет данные на месте. Подробное объяснение: https://lihan.me/2018/01/numpy-reshape-and-transpose/#:~:text=numpy.,format array into that shape.amp;text=Transpose, on the other hand,in a higher dimensional setting.