Keras序列模型,更多输入

2024-06-08 19:01:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我对机器学习很陌生,目前正在开发一个“汽车价值预测”应用程序。我把数据输入模型的地方卡住了。我有4个输入:

  • 日期:汽车的首次注册日期(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)

有人能指出我做错了什么吗?或者我如何实现一个像图中那样的模型“结构”?在

编辑:

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

^{pr2}$

提前谢谢你。在


Tags: name类型inputdatemodeltrainactivation汽车
1条回答
网友
1楼 · 发布于 2024-06-08 19:01:03

我认为你的第二个实现是错误的。在

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

相关问题 更多 >