от
Я следую учебному пособию по классификации изображений TensorFlow. Мой вариант использования немного отличается от учебного, он использует шахматные фигуры, в то время как я использую светофор и хочу определить, красный ли он, зеленый или желтый. Я обнаружил, что результаты моих тестов неудовлетворительны, и мне интересно, связано ли это с
cv2.IMREAD_GRAYSCALE
, который я вижу в разделе CreateData данного руководства. Конечно, цвет имеет значение в моем классификаторе, поэтому мне интересно, конвертируется ли учебник в оттенки серого, отсюда и отсутствие точных результатов. Поэтому я изменил все ссылки на
cv2.IMREAD_GRAYSCALE
на
cv2.IMREAD_COLOR
, перезапустил подпрограммы CreateData, затем попытался запустить программу создания NeuralNetwork, но затем произошел сбой с ошибкой:
  File "CreateNeuralNetwork.py", line 54, in 
    history = model.fit(X, y, batch_size=32, epochs=40, validation_split=0.1)
  File "/Users/stuff/Library/Python/2.7/lib/python/site

Я предполагаю, что это изменило размер / сложность моей сети и, таким образом, теперь что-то не так в создании сети, кто-нибудь может мне помочь отследить, где это будет (я не изменил какую-либо его часть из поста в блоге, на который я ссылался выше ).

Бьюсь об заклад, есть изменения, необходимые в этом бите:

# 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? Будут ли важны эти другие параметры? Как я узнаю, что перетренировал модель? Какой переломный момент?              

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

1 Ответ

0 голосов
от
Ясно, что ошибка показывает, что каждый канал цветного изображения обрабатывается как отдельное изображение в оттенках серого. Поэтому «найдено 195 входных и 65 целевых образцов», то есть в 3 раза больше. Итак, вы должны посмотреть в коде, где данные готовятся. Проверьте строку 53
X = np.array(X).reshape(

Вы должны изменить это на

X = np.array(X).reshape(

Надеюсь это поможет.

Относительно вашего второго вопроса «Как я узнаю, что я« перетренировал »модель? Каков переломный момент?»

Постройте график точности и потерь, и это даст вам представление о смещении и дисперсии. Для настройки параметра epochs могут пригодиться обратные вызовы Keras. При этом вы можете отслеживать любое количество, например train_loss, train_acc и т. Д., И если оно не увеличивается, вы можете автоматически прекратить подгонку модели дальше.
    
...