Python Keras序列模型,更多输入

Python Keras序列模型,更多输入,python,machine-learning,model,keras,Python,Machine Learning,Model,Keras,我对机器学习非常陌生,目前正在开发“汽车价值预测”应用程序。我陷入了必须向模型提供数据的境地。我有4个输入: 日期:汽车的首次登记日期(int) km:汽车的里程计(int) 消费:汽车的消费类型(一个带有10个元素的热编码向量,例如汽油:[1 0 0 0]) 类型:汽车类型(例如:“BMW-320”,存储在一个440元素的热编码向量中) 和一个输出: 汽车的价格 我想做一些类似的事情: 我尝试了以下编译的代码,但输出不是我想要的: model = Sequential([ Dense(

我对机器学习非常陌生,目前正在开发“汽车价值预测”应用程序。我陷入了必须向模型提供数据的境地。我有4个输入:

  • 日期:汽车的首次登记日期(int)
  • km:汽车的里程计(int)
  • 消费:汽车的消费类型(一个带有10个元素的热编码向量,例如汽油:[1 0 0 0])
  • 类型:汽车类型(例如:“BMW-320”,存储在一个440元素的热编码向量中)
和一个输出:

  • 汽车的价格
我想做一些类似的事情:

我尝试了以下编译的代码,但输出不是我想要的:

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)
有人能指出我做错了什么,或者我如何实现图中所示的模型“结构”吗

编辑: 我想这就是我要找的。有人能证实这一点吗?:)


提前谢谢。

我认为您的第二次实现是错误的

通过这样实现,稠密_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)

现在我明白了,为什么我的网络看起来像这样:非常感谢你的澄清!您的实现如下所示:
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)