Керас Последовательная модель, больше входов - PullRequest
0 голосов
/ 21 мая 2018

Я довольно новичок в машинном обучении, и в настоящее время я работаю над приложением "Предсказатель стоимости автомобиля".Я застрял, где я должен передать свои данные в мою модель.У меня есть 4 ввода:

  • дата: дата первой регистрации автомобиля (int)
  • km: метр пробега автомобиля (int)
  • потребления: потребление автомобилятип (вектор с горячим кодированием с 10 элементами, например, для бензина: [1 0 0 0 0 0 0 0 0 0])
  • тип: тип автомобиля (например: «BMW-320», хранится вкод в горячем виде с 440 элементами)

и один вывод:

  • цена автомобиля.

Я бы хотелсделать что-то похожее на это: https://imgur.com/wlvffn7

Я попробовал следующий код, который компилируется, но вывод не то, что я хотел:

model = Sequential([
Dense(128, input_shape=(1,), activation='relu', name='date'),
Dense(128, input_shape=(1,), activation='relu', name='km'),
Dense(128, input_shape=(10,), activation='relu', name='consume'),
Dense(128, input_shape=(440,), activation='relu', name='type'),
Dropout(0.5),
Dense(128, activation='relu'),
Dropout(0.5),
Dense(1, activation='linear') 
])
model.compile(loss='mse', optimizer='adam')
model.fit( x = {'date' : samples_train['input'][:,0],
                'km' : samples_train['input'][:,1],
                'consume':samples_train['input'][:,2],
                'type':samples_train['input'][:,3]},
           y = samples_train['output'],
           epochs=1000,
           batch_size=16,
           verbose=1, 
           validation_data = ({'date' : samples_valid['input'][:,0],
                               'km' : samples_valid['input'][:,1],
                               'consume':samples_valid['input'][:,2],
                               'type':samples_valid['input'][:,3]}, samples_valid['output']),
           callbacks=callbacks)

Может кто-нибудь указать, что я делаю неправильноили как я могу реализовать модель "структура", как на картинке?

РЕДАКТИРОВАТЬ:

Я думаю, это то, что я искал.Кто-нибудь может это подтвердить?:)

input_1 = Input(shape=(1,), name='date')           # input layers
input_2 = Input(shape=(1,), name='km')
input_3 = Input(shape=(10,), name='consume')
input_4 = Input(shape=(440,), name='type')
dense_1 = Dense(256, activation='relu')(input_1)   # hidden layers
dense_1 = Dense(256, activation='relu')(input_2)
dense_1 = Dense(256, activation='relu')(input_3)
dense_1 = Dense(256, activation='relu')(input_4)
dropout_1 = Dropout(0.5)(dense_1)
dense_2 = Dense(256, activation='relu')(dropout_1)
dropout_2 = Dropout(0.5)(dense_2)
outputs = Dense(1, activation='linear')(dropout_2) # output layer

model = Model([input_1,input_2,input_3,input_4], outputs)

Заранее спасибо.

1 Ответ

0 голосов
/ 22 мая 2018

Я думаю, что ваша вторая реализация неверна.

Реализуя его таким образом, плотность_1 будет иметь только значение, которое вы задали ему в последней строке: input_4 = Input(shape=(440,), name='type'), таким образом, не принимая во внимание остальные последствия для остальной части сети.

Что вам нужно сделать, это объединить ваши входные данные в одну строку перед подачей на первый плотный слой, например:

from keras.layers import Concatenate

input_1 = Input(shape=(1,), name='date')           # input layers
input_2 = Input(shape=(1,), name='km')
input_3 = Input(shape=(10,), name='consume')
input_4 = Input(shape=(440,), name='type')

x = Concatenate()([input_1 , input_2 , input_3 , input_4]) # Concatenation of the inputs.

dense_1 = Dense(256, activation='relu')(x)   # hidden layers
dropout_1 = Dropout(0.5)(dense_1)

dense_2 = Dense(256, activation='relu')(dropout_1)
dropout_2 = Dropout(0.5)(dense_2)

outputs = Dense(1, activation='linear')(dropout_2) # output layer

model = Model([input_1,input_2,input_3,input_4], outputs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...