我试图学习如何使用本教程将 SQL 数据集读入 Tensorflow 。直到最后一步一切正常!
dataset = tfio.experimental.IODataset.from_sql(
query="SELECT pt08s1, nmhc, c6h6, co FROM AirQualityUCI;",
endpoint=endpoint)
print(dataset.element_spec)
#{'pt08s1': TensorSpec(shape=(), dtype=tf.int32, name=None), 'nmhc': TensorSpec(shape=(), dtype=tf.float32, name=None), 'c6h6': TensorSpec(shape=(), dtype=tf.float32, name=None), 'co': TensorSpec(shape=(), dtype=tf.float32, name=None)}
我只记录前 10 条记录。
dataset = dataset.take(10)
for i in dataset.as_numpy_iterator():
print(i)
# {'pt08s1': 1360, 'nmhc': 150.0, 'c6h6': 11.9, 'co': 2.6}
# {'pt08s1': 1292, 'nmhc': 112.0, 'c6h6': 9.4, 'co': 2.0}
# {'pt08s1': 1402, 'nmhc': 88.0, 'c6h6': 9.0, 'co': 2.2}
# {'pt08s1': 1376, 'nmhc': 80.0, 'c6h6': 9.2, 'co': 2.2}
# {'pt08s1': 1272, 'nmhc': 51.0, 'c6h6': 6.5, 'co': 1.6}
# {'pt08s1': 1197, 'nmhc': 38.0, 'c6h6': 4.7, 'co': 1.2}
# {'pt08s1': 1185, 'nmhc': 31.0, 'c6h6': 3.6, 'co': 1.2}
# {'pt08s1': 1136, 'nmhc': 31.0, 'c6h6': 3.3, 'co': 1.0}
# {'pt08s1': 1094, 'nmhc': 24.0, 'c6h6': 2.3, 'co': 0.9}
# {'pt08s1': 1010, 'nmhc': 19.0, 'c6h6': 1.7, 'co': 0.6}
现在,我y
是co
变量,其余的是自变量。我想为演示目的创建一个非常基本的 DNN 回归模型。
model = tf.keras.Sequential([
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(1)
])
model.compile(loss='mean_absolute_error', optimizer=tf.keras.optimizers.Adam(0.001))
我知道我需要简单地将一个元组(x,y)
输入模型,但这是一个元组字典。我尝试使用以下方法将其映射为分离特征和标签:
dataset = dataset.map(lambda item: ((item['pt08s1'], item['nmhc'], item['c6h6']), item['co']))
#<MapDataset shapes: (((), (), ()), ()), types: ((tf.int32, tf.float32, tf.float32), tf.float32)>
并运行
model.fit(dataset, epochs=2)
但我收到一个错误:
ValueError: Layer my_model expects 1 input(s), but it received 3 input tensors. Inputs received: [<tf.Tensor 'IteratorGetNext:0' shape=() dtype=int32>, <tf.Tensor 'IteratorGetNext:1' shape=() dtype=float32>, <tf.Tensor 'IteratorGetNext:2' shape=() dtype=float32>]
我不知道如何弄清楚。我感谢所有的帮助!