TensorFlow模型的输入

时间:2020-03-23 17:39:05

标签: python tensorflow

我是TensorFlow的新手。我的任务是预测一些值(在这种情况下为速度)。如果我使用一个值作为模型输入(l0),那么一切都很好,我可以对其进行训练并做出预测:

    dataset, meta = arff.loadarff('data.arff')

#   meta:  'XYZ'
#   TIMESTAMP_ms's type is numeric
#   SPEED_KMH's type is numeric
#   POWER_W's type is numeric
#   CURRENT_A's type is numeric
#   VOLTAGE_V's type is numeric
#   TORQUE_Nm's type is numeric
#   CADENCE_RPM's type is numeric


speed   = np.array(dataset[:]['SPEED_KMH'], dtype=float)
cadence = np.array(dataset[:]['CADENCE_RPM'], dtype=float)
power   = np.array(dataset[:]['POWER_W'], dtype=float)
torque  = np.array(dataset[:]['TORQUE_Nm'], dtype=float)

# Create model
l0 = tf.keras.layers.Dense(units=4, input_shape=[1]) #with one input all ok. BUT HOW TO USE n-Input?
l1 = tf.keras.layers.Dense(units=4)
l2 = tf.keras.layers.Dense(units=1)
model = tf.keras.Sequential([l0, l1, l2])

model.compile(loss='mean_squared_error', optimizer=tf.keras.optimizers.Adam(0.01))

model.fit(cadence, speed, epochs=500, verbose=True)
...

model.predict([<some_val>])

但是,当我尝试向输入层添加多个值以提高模型的准确性时,我遇到了问题:

...
train_data = []
for i in range(len(dataset)):
    train_data.append([cadence[i], power[i], torque[i]])
...
l0 = tf.keras.layers.Dense(units=4, input_shape=[3])
...
model.fit(train_data, speed, epochs=1, verbose=True)

ValueError:未能找到可以处理输入的数据适配器:(包含类型为{'(

请帮我将多个值传输到模型的输入层l0吗?

1 个答案:

答案 0 :(得分:0)

为模型使用多个输入的一种方法是使用Tensorflow的功能性API。它允许您设置多个输入,以后可以在模型中将它们连接在一起。

input1 = tf.keras.layers.Input(shape=(1, ))
input2 = tf.keras.layers.Input(shape=(1,))
input3 = tf.keras.layers.Input(shape=(1,))
mergeLayer = tf.keras.layers.Concatenate(axis=1)([input1, input2, input3])
dense1 = tf.keras.layers.Dense(4)(mergeLayer)
dense2 = tf.keras.layers.Dense(4)(dense1)
output = tf.keras.layers.Dense(1)(dense2)
model = tf.keras.models.Model([input1, input2, input3], output)

现在,您可以尝试将数据合并到一个列表中,并在新模型上调用fit()方法。

有关功能性API的更多信息,请转到文档。 The Keras Functional API