首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tensorflow模型拟合ValueError:图层顺序期望一个输入,但它收到520个输入张量

Tensorflow模型拟合ValueError:图层顺序期望一个输入,但它收到520个输入张量
EN

Data Science用户
提问于 2021-02-16 18:21:05
回答 1查看 8.8K关注 0票数 1

我试着用Tensorflow训练一个模型。我正在使用tf.data.experimental.make_csv_dataset读取一个巨大的csv文件。

这是我的代码:

导入:

代码语言:javascript
复制
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.layers.experimental import preprocessing

LABEL_COLUMN = 'venda_qtde'

将csv读入tf.data.Dataset:

代码语言:javascript
复制
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 dataset

构建模型实例:

代码语言:javascript
复制
def 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

执行函数的

代码语言:javascript
复制
ds_treino = get_dataset('data/processed/curva_a/curva_a_train.csv')
nn_model = build_model()
nn_model.fit(ds_treino, epochs=10)

但是,当调用fit函数时,我会得到错误:

代码语言:javascript
复制
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行。

有人能帮我做错事吗?

EN

回答 1

Data Science用户

发布于 2021-02-17 10:55:41

首先,查看tf.data.Dataset返回的张量的形状,然后尝试设置第一个密集层的input_shape,如下所示:

代码语言:javascript
复制
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/序列

票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/89457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档