### Keras Sequential模型,多输入

我对机器学习还比较新手,目前正在开发一个“汽车估值预测器”应用。我卡在了将数据输入模型的步骤。我有4个输入:

  • date:汽车首次注册日期(整数)
  • km:汽车行驶里程(整数)
  • consume:汽车的燃料类型(使用10个元素的独热编码向量表示,例如汽油车:[1 0 0 0 0 0 0 0 0 0])
  • type:汽车的类型(例如:“BMW-320”,使用440个元素的独热编码向量存储)

以及一个输出:

  • 汽车的价格。

我想做类似于这个的东西:https://i.sstatic.net/MpYRo.jpg

我尝试了以下代码,虽然它可以编译,但输出结果不是我想要的:

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_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)   # 隐藏层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) # 输出层model = Model([input_1,input_2,input_3,input_4], outputs)

提前感谢。


回答:

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

通过这种实现方式,dense_1 将只保留你在最后一行赋予的值:input_4 = Input(shape=(440,), name='type'),因此不会考虑到网络其余部分的其他输入。

你应该在将输入馈送到第一个密集层之前将它们连接成一行,像这样:

from keras.layers import Concatenateinput_1 = Input(shape=(1,), name='date')           # 输入层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]) # 输入的连接dense_1 = Dense(256, activation='relu')(x)   # 隐藏层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) # 输出层model = Model([input_1,input_2,input_3,input_4], outputs)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注