Я пытаюсь использовать CNN для обнаружения объектов с использованием Tensorflow с Keras.Я довольно новичок в этом, поэтому я использовал учебник в качестве руководства, но со своим собственным набором и несколькими другими вещами.Ошибка, которую я получаю, - это несовместимые формы Tensorflow с [x, 2] против [x], где x - любое количество обучающих образов, которые у меня есть, а 2 - количество классов.Я использовал небольшое количество изображений только для тестирования, но я почти уверен, что проблема не в этом?
Я безуспешно пробовал разные кратные тренировочные образы, и я посмотрел на model.summary () посмотреть, выложена ли модель именно так, как я этого хочу.Кроме того, я напечатал формы своих тренировочных изображений и их ярлыки, и они выглядят правильно.
Изображения имеют размер 28 x 28 пикселей, с плоским размером 784 и полной формой (28,28,1), 1 - количество каналов (в оттенках серого).У меня только два класса и всего 10 тренировочных образов (я могу получить больше, если это считается проблемой).
model = Sequential()
model.add(InputLayer(input_shape=(img_size_flat,)))
model.add(Reshape(img_shape_full))
model.add(Conv2D(kernel_size=5, strides=1, filters=16, padding='same',
activation='relu', name='layer_conv1'))
model.add(MaxPooling2D(pool_size=2, strides=2))
model.add(Conv2D(kernel_size=5, strides=1, filters=36, padding='same',
activation='relu', name='layer_conv2'))
model.add(MaxPooling2D(pool_size=2, strides=2))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))
from tensorflow.python.keras.optimizers import Adam
optimizer = Adam(lr=1e-3)
model.compile(optimizer=optimizer,
loss='categorical_crossentropy',
metrics=['accuracy'])
from tensorflow.python.keras.utils import to_categorical
model.fit(x=data.train,
y=to_categorical(data.train_labels),
batch_size=128, epochs=1)
Я использовал to_categorical () на ярлыках только потому, что они каким-то образом конвертировались в целые.Я проверил, что они сохранили свои правильные значения и т. Д.
Я распечатал сводку модели, чтобы проверить макет:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
reshape (Reshape) (None, 28, 28, 1) 0
_________________________________________________________________
layer_conv1 (Conv2D) (None, 28, 28, 16) 416
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 14, 14, 16) 0
_________________________________________________________________
layer_conv2 (Conv2D) (None, 14, 14, 36) 14436
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 7, 7, 36) 0
_________________________________________________________________
flatten (Flatten) (None, 1764) 0
_________________________________________________________________
dense (Dense) (None, 128) 225920
_________________________________________________________________
dense_1 (Dense) (None, 2) 258
=================================================================
Total params: 241,030
Trainable params: 241,030
Non-trainable params: 0
_________________________________________________________________
None
Я напечатал размер данных numpy:
print(data.train.shape)
print(data.train_labels.shape)
, который печатает
(10, 784) #This is the shape of the images
(10, 2) #This is the shape of the labels
Ошибка:
2019-04-08 10:46:40.239226: I tensorflow/stream_executor/dso_loader.cc:152] successfully opened CUDA library cublas64_100.dll locally
Traceback (most recent call last):
File "C:/Users/bunja/Dev/testCellDet/project/venv/main.py", line 182, in <module>
batch_size=128, epochs=1)
File "C:\Users\bunja\Miniconda3\lib\site-packages\tensorflow\python\keras\engine\training.py", line 880, in fit
validation_steps=validation_steps)
File "C:\Users\bunja\Miniconda3\lib\site-packages\tensorflow\python\keras\engine\training_arrays.py", line 329, in model_iteration
batch_outs = f(ins_batch)
File "C:\Users\bunja\Miniconda3\lib\site-packages\tensorflow\python\keras\backend.py", line 3076, in __call__
run_metadata=self.run_metadata)
File "C:\Users\bunja\Miniconda3\lib\site-packages\tensorflow\python\client\session.py", line 1439, in __call__
run_metadata_ptr)
File "C:\Users\bunja\Miniconda3\lib\site-packages\tensorflow\python\framework\errors_impl.py", line 528, in __exit__
c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [10,2] vs. [10]
[[{{node metrics/acc/Equal}}]]
[[{{node loss/mul}}]]
Как можно видеть, в сводке показано, что плотность_1 имеет выходную форму (Нет, 2).Это то место, где у меня проблема, так как у меня есть ошибка несовместимых фигур: [x, 2] против [x]?Я проверил учебник, который я использовал для изучения этого материала, и не обнаружил серьезных отличий.Я все еще новичок в этом, так что это может быть что-то маленькое, и мне может быть не хватает некоторой информации, поэтому, пожалуйста, спросите, если у вас есть какие-либо вопросыСпасибо !!!!!
Дополнительная информация:
Графический процессор: GeForce GTX 1080 Major: 6 вспомогательных: 1 memoryClockRate (ГГц): 1,7335
Версия Tensorflow: 1.13.1
Версия Python: Python 3.7.3
Вот код комментария к форме to_categorical:
print(data.train_labels.shape)
print()
print(to_categorical(data.train_labels).shape)
Вывод:
(10, 2)
(10, 2, 2)
У меня есть ощущение, что это может быть источником моей ошибки?Но я не уверен, как это исправить ...