Python Keras序列模型,更多输入
我对机器学习非常陌生,目前正在开发“汽车价值预测”应用程序。我陷入了必须向模型提供数据的境地。我有4个输入: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(
- 日期:汽车的首次登记日期(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)