Невозможно предвосхитить правильные значения из моей регрессионной модели - PullRequest
0 голосов
/ 21 апреля 2020

Голова прогнозирования позволяет получать выходные данные в форме зевания с шагом крена, используя модель на изображении, но результат не является точным. Набор данных имеет в общей сложности 5500 изображений

  • Какие значения должны быть:

    • Рулон: 0,67 °
    • Шаг : -4,89 °
    • рыскание: 22,57 °
  • Значения моей модели:

    • Roll : 356,10 °
    • Шаг: 1036,82 °
    • Тяга: 532,35 °

`

#opening the  dataset
a,b,c,d = pkl.load(open('samples.pkl', 'rb'))

#concatenating the 2 arrays
x = np.concatenate((a,b), axis=0)
y = np.concatenate((c,d), axis=0)


#Assigning degrees to roll pitch and yaw
roll, pitch, yaw = y[:, 0], y[:, 1], y[:, 2]

#test and train division
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=2)
x_val, x_test, y_val, y_test = train_test_split(x_test, y_test, test_size=0.2, random_state=2)

print(x_train.shape, y_train.shape)
print(x_val.shape, y_val.shape)
print(x_test.shape, y_test.shape)

#standazing the test and train sets
std = StandardScaler()
std.fit(x_train)
x_train = std.transform(x_train)
x_val = std.transform(x_val)
x_test = std.transform(x_test)

BATCH_SIZE = 64
EPOCHS = 100

#model of cnn
model = Sequential()
model.add(Dense(units=20, activation='relu', kernel_regularizer='l2', input_dim=x.shape[1]))
model.add(Dense(units=10, activation='relu', kernel_regularizer='l2'))
model.add(Dense(units=3, activation='linear'))

print(model.summary())


#compiling the model
callback_list = [EarlyStopping(monitor='val_loss', patience=25)]
model.compile(optimizer='adam', loss='mean_squared_error',metrics=['accuracy'])
hist = model.fit(x=x_train, y=y_train, validation_data=(x_val, y_val), batch_size=BATCH_SIZE, epochs=EPOCHS, callbacks=callback_list)



model.save('model.h5')

`

1 Ответ

0 голосов
/ 21 апреля 2020

Прежде всего, прогнозирование позы головы по изображениям не является основной проблемой c регрессии, это, фактически, проблема компьютерного зрения, которая требует некоторого подхода на основе компьютерного зрения.

Ваша модель фиктивный MLP, который никогда не будет хорошо работать с данной проблемой.

Я даю вам несколько советов, вам все равно нужно выяснить, какой из них работает на основе экспериментов.

  1. Вместо используя MLP, начните с Con vNet. Вот простая CNN для регрессии.
model = Sequential()
model.add(Conv2D(32, (3, 3), padding='same',
                 input_shape=x_train.shape[1:]))
model.add(Activation('relu'))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Conv2D(64, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(3))

Избавьтесь от Flatten и используйте Global Pooling, если модель подходит.

Попробуйте нормализовать вывод. Вместо слепой регрессии, отрегулируйте крен, шаг до 0 - 1, используя нормализацию min-max. Используйте сигмоид в последнем слое в этом случае.

Вот статья, чтобы получить базовую c идею и начать с базовой модели: https://aip.scitation.org/doi/pdf/10.1063/1.4982509

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...