Я следую учебнику по классификации изображений TensorFlow .
Мой вариант использования немного отличается от учебного, он использует шахматные фигуры, в то время как я использую светофор и хочу определить, красный ли он, зеленый или желтый.
Я считаю, что результаты моих тестов неудовлетворительны, и мне интересно, связано ли это с cv2.IMREAD_GRAYSCALE
, которое я вижу в разделе CreateData учебника. Конечно, цвет имеет значение в моем классификаторе, поэтому мне интересно, конвертируется ли учебник в оттенки серого, отсюда и отсутствие точных результатов.
Поэтому я изменил все ссылки с cv2.IMREAD_GRAYSCALE
на cv2.IMREAD_COLOR
, перезапустил подпрограммы CreateData, затем попытался запустить программу создания NeuralNetwork, но затем произошел сбой с ошибкой:
File "CreateNeuralNetwork.py", line 54, in <module>
history = model.fit(X, y, batch_size=32, epochs=40, validation_split=0.1)
File "/Users/stuff/Library/Python/2.7/lib/python/site-packages/tensorflow/python/keras/engine/training.py", line 709, in fit
shuffle=shuffle)
File "/Users/stuff/Library/Python/2.7/lib/python/site-packages/tensorflow/python/keras/engine/training.py", line 2688, in _standardize_user_data
training_utils.check_array_lengths(x, y, sample_weights)
File "/Users/stuff/Library/Python/2.7/lib/python/site-packages/tensorflow/python/keras/engine/training_utils.py", line 483, in check_array_lengths
'and ' + str(list(set_y)[0]) + ' target samples.')
ValueError: Input arrays should have the same number of samples as target arrays. Found 195 input samples and 65 target samples.
Я предполагаю, что это изменило размер / сложность моей сети, и, таким образом, теперь что-то не так в создании сети, кто-нибудь может мне помочь отследить, где это будет (я не изменил какую-либо его часть из сообщения в блоге, которое я ссылка на выше).
Могу поспорить, в этом бите необходимы изменения:
# normalizing data (a pixel goes from 0 to 255)
X = X/255.0
# Building the model
model = Sequential()
# 3 convolutional layers
model.add(Conv2D(32, (3, 3), input_shape = X.shape[1:]))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(64, (3, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(64, (3, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
Учитывая, что пиксель в градациях серого будет от 0 до 255, но цветовой пиксель будет намного больше, и, скорее всего, будет вектором RGB. Я не уверен, куда идти или что менять.
Я могу быть на пути, мысли будут оценены.
Дополнительно при обучении модели по линии:
history = model.fit(X, y, batch_size=32, epochs=40, validation_split=0.1)
Кажется, эпохи - это сколько раз тренировать модель. Есть ли преимущество делать это 400 раз за 40? Будут ли важны эти другие параметры? Как я узнаю, что перетренировал модель? Какой переломный момент?