Переходите с 10 на 25 выходов CNN, но модифицированный код не работает? - PullRequest
0 голосов
/ 08 мая 2020

Есть ли какое-нибудь руководство, которому я могу следовать, чтобы помочь настроить CNN, используя последовательный метод? У меня есть набор данных из более чем 100 000 изображений из Kaggle, и я хочу разделить их на 25 различных групп.

Я понимаю, что мне нужно добавить слои Conv2D, MaxPooling2D, Flatten и Dense. Но я не уверен, сколько их и какие параметры задавать. Я понимаю, что мне придется использовать метод проб и ошибок, пока я не добьюсь высокой точности, но сейчас я получаю точность 0%. Я нашел в Интернете следующий фрагмент кода, который работает для классификации из 10 категорий, и я пытаюсь увидеть, как это будет изменено с go на 25 групп.

model = Sequential()
model.add(Conv2D(32, (5, 5), activation='relu', input_shape=(100, 100, 1))) 
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu')) 
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(10, activation='softmax'))

Я попытался изменить масштаб ввода на input_shape = (200, 200, 1), чтобы соответствовать размеру моего входного изображения, и я также изменил слой Final Dense с 10 на 25, однако я все еще получаю точность 0%. Любой совет приветствуется!

Моя скомпилированная модель и подгонка показаны ниже:

model.compile(optimizer='adam',loss='sparse_categorical_crossentropy', metrics=['accuracy']) 

model.fit(X_train, y_train, epochs=3, batch_size=64, verbose=1, validation_data=(X_test, y_test))

1 Ответ

0 голосов
/ 09 мая 2020

Убедитесь, что вы нормализуете данные (если вы еще этого не сделали), разделив изображения на 255, чтобы получить значения пикселей от 0 до 1.

Если вы хотите классифицировать изображения на 25 классы, данные должны иметь соответствующие метки, и вам нужно будет изменить последний слой с 10 плотных узлов на 25.

т.е.

model = Sequential()
model.add(Conv2D(32, (5, 5), activation='relu', input_shape=(100, 100, 1))) 
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu')) 
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(25, activation='softmax'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...