Итак, я пытаюсь создать нейронную сеть, которая подсчитывает количество «пятен» на изображениях, подобных этим:
одно изображение
другоеimage
Изображения генерируются случайным образом с помощью сценария, который я написал, вместе с CSV с количеством сгенерированных BLOB-объектов, поэтому количество обучающих данных не является проблемой. Кроме того, я изменяю их размер до 64x64, так как в этом разрешении я все еще мог различать двоичные объекты самостоятельно.
Я решил, что регрессионная нейронная сеть будет лучше (хотя я могу ошибаться), однако я недействительно есть большой опыт работы с ними. Поэтому лучшее, что я мог сделать, - это адаптировать классификационную сеть, которую я имел, к этому:
model.add(Conv2D(64, (6, 6), activation = "relu", padding = 'same', input_shape = (64,64,4)))
model.add(Conv2D(64, (6, 6), activation = "relu", padding = 'same'))
model.add(MaxPooling2D((4, 4)))
model.add(Dropout(0.25))
model.add(Conv2D(128, (6, 6), activation = "relu", padding = 'same'))
model.add(Conv2D(128, (6, 6), activation = "relu", padding = 'same'))
model.add(MaxPooling2D(pool_size = (4, 4)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(1024, activation = 'relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation = 'relu'))
model.compile(loss='MSE',
optimizer='adam',
metrics=['mse'])
hist = model.fit(x_train, y_train,
batch_size=40, epochs=30,
validation_split=0.2)
Мне удалось заставить код работать нормально, но модель, похоже, не слишком многому научилась. Я считаю, что я использую неправильную архитектуру для этого, но я действительно не знаю лучший подход.