我试着用Tensorflow训练一个模型。我正在使用tf.data.experimental.make_csv_dataset读取一个巨大的csv文件。
这是我的代码:
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.layers.experimental import preprocessing
LABEL_COLUMN = 'venda_qtde'def get_dataset(file_path, **kwargs):
dataset = tf.data.experimental.make_csv_dataset(
file_path,
batch_size=4096,
na_value="?",
label_name=LABEL_COLUMN,
num_epochs=1,
ignore_errors=False,
shuffle=False,
**kwargs)
return datasetdef build_model():
model = None
model = keras.Sequential([
layers.Dense(520, activation='relu'),
layers.Dense(520, activation='relu'),
layers.Dense(520, activation='relu'),
layers.Dense(1)
])
model.compile(loss='mean_squared_error',
optimizer='adam',
metrics=['mae'])
return model执行函数的
ds_treino = get_dataset('data/processed/curva_a/curva_a_train.csv')
nn_model = build_model()
nn_model.fit(ds_treino, epochs=10)但是,当调用fit函数时,我会得到错误:
ValueError: in user code:
/home/machine-learning/.virtualenvs/jupyter-n5c7sT9n/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:806 train_function *
return step_function(self, iterator)
/home/machine-learning/.virtualenvs/jupyter-n5c7sT9n/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:796 step_function **
outputs = model.distribute_strategy.run(run_step, args=(data,))
/home/machine-learning/.virtualenvs/jupyter-n5c7sT9n/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:1211 run
return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
/home/machine-learning/.virtualenvs/jupyter-n5c7sT9n/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:2585 call_for_each_replica
return self._call_for_each_replica(fn, args, kwargs)
/home/machine-learning/.virtualenvs/jupyter-n5c7sT9n/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:2945 _call_for_each_replica
return fn(*args, **kwargs)
/home/machine-learning/.virtualenvs/jupyter-n5c7sT9n/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:789 run_step **
outputs = model.train_step(data)
/home/machine-learning/.virtualenvs/jupyter-n5c7sT9n/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:747 train_step
y_pred = self(x, training=True)
/home/machine-learning/.virtualenvs/jupyter-n5c7sT9n/lib/python3.8/site-packages/tensorflow/python/keras/engine/base_layer.py:975 __call__
input_spec.assert_input_compatibility(self.input_spec, inputs,
/home/machine-learning/.virtualenvs/jupyter-n5c7sT9n/lib/python3.8/site-packages/tensorflow/python/keras/engine/input_spec.py:155 assert_input_compatibility
raise ValueError('Layer ' + layer_name + ' expects ' +
ValueError: Layer sequential expects 1 inputs, but it received 520 input tensors. Inputs received: ...我的数据集有519个特征,一个标签和大约17M行。
有人能帮我做错事吗?
发布于 2021-02-17 10:55:41
首先,查看tf.data.Dataset返回的张量的形状,然后尝试设置第一个密集层的input_shape,如下所示:
model = keras.Sequential([
layers.Dense(520, activation='relu', input_shape=(1, 519)),
layers.Dense(520, activation='relu'),
layers.Dense(520, activation='relu'),
layers.Dense(1)
])或者显式地添加输入层。
或设置第一致密层对应于特征数的神经元数目(519)
还可以阅读它们非常棒的文档:https://www.tensorflow.org/api_docs/python/tf/keras/序列
https://datascience.stackexchange.com/questions/89457
复制相似问题