У меня есть набор данных с большим количеством изображений, и каждое из этих изображений показывает мне прямоугольник определенной ширины. Моя задача теперь состоит в том, чтобы автоматически определять ширину этих прямоугольников путем распознавания изображений, и я обучил CNN для регрессии изображения, как в приведенном ниже коде.
Однако этот CNN дает мне очень плохие значения, то есть mses в диапазоне 4 000 000, а также очень неточная оценка фактической ширины. Во время своих экспериментов я даже использовал набор обучающих данных в качестве набора тестовых данных, но даже здесь CNN, похоже, не узнал ничего полезного.
У вас есть идея, что я могу делать не так ? Возможно ли, что я каким-то образом искажаю сами изображения, читая их?
Я новичок в машинном обучении, поэтому меня радует каждый ваш ввод! : -)
Это модель:
def create_model():
model = Sequential()
model.add(Convolution2D(32, (3, 3), input_shape=(64, 64, 3), activation='relu'))
model.add(Flatten())
model.add(Dense(64, activation="relu"))
model.add(Dense(1))
model.compile(loss="mse", optimizer="adam")
return model
А это обучающий код:
classifier = create_model()
// Getting image id and its corresponding square width
data = pd.read_csv('../data/data.csv')
id_width = data[['id', 'width']]
// Training the model
train_datagen = ImageDataGenerator()
training_set = train_datagen.flow_from_dataframe(dataframe=id_width, directory='../data/images',
x_col="id", y_col="width", has_ext=True,
class_mode="raw", target_size=(64, 64),
batch_size=32)
classifier.fit_generator(
training_set,
epochs=50,
validation_data=training_set)