Python 3.x Tensorflow-model.fit中的值错误-如何修复

Python 3.x Tensorflow-model.fit中的值错误-如何修复,python-3.x,tensorflow,machine-learning,neural-network,mnist,Python 3.x,Tensorflow,Machine Learning,Neural Network,Mnist,我正在尝试使用MNIST数据集训练一个深度神经网络 BATCH_SIZE = 100 train_data = train_data.batch(BATCH_SIZE) validation_data = validation_data.batch(num_validation_samples) test_data = scaled_test_data.batch(num_test_samples) validation_inputs, validation_targets = next(it

我正在尝试使用MNIST数据集训练一个深度神经网络

BATCH_SIZE = 100
train_data = train_data.batch(BATCH_SIZE)
validation_data = validation_data.batch(num_validation_samples)
test_data = scaled_test_data.batch(num_test_samples)

validation_inputs, validation_targets = next(iter(validation_data))

input_size = 784
output_size = 10
hidden_layer_size = 50

model = tf.keras.Sequential([
                    tf.keras.layers.Flatten(input_shape=(28,28,1)),
                    tf.keras.layers.Dense(hidden_layer_size, activation='relu'),
                    tf.keras.layers.Dense(hidden_layer_size, activation='relu'),
                    tf.keras.layers.Dense(output_size, activation='softmax')                        
                ])

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

NUM_EPOCHS = 5
model.fit(train_data, epochs=NUM_EPOCHS, validation_data=(validation_inputs,validation_targets))
model.fit抛出以下错误

-------------------------------------------------------------------------

--
ValueError                                Traceback (most recent call last)
<ipython-input-58-c083185dafc6> in <module>
      1 NUM_EPOCHS = 5
----> 2 model.fit(train_data, epochs=NUM_EPOCHS, validation_data=(validation_inputs,validation_targets))

~/anaconda3/envs/py3-TF2/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
    726         max_queue_size=max_queue_size,
    727         workers=workers,
--> 728         use_multiprocessing=use_multiprocessing)
    729 
    730   def evaluate(self,

~/anaconda3/envs/py3-TF2/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_v2.py in fit(self, model, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, **kwargs)
    222           validation_data=validation_data,
    223           validation_steps=validation_steps,
--> 224           distribution_strategy=strategy)
    225 
    226       total_samples = _get_total_number_of_samples(training_data_adapter)

~/anaconda3/envs/py3-TF2/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_v2.py in _process_training_inputs(model, x, y, batch_size, epochs, sample_weights, class_weights, steps_per_epoch, validation_split, validation_data, validation_steps, shuffle, distribution_strategy, max_queue_size, workers, use_multiprocessing)
    562                                     class_weights=class_weights,
    563                                     steps=validation_steps,
--> 564                                     distribution_strategy=distribution_strategy)
    565     elif validation_steps:
    566       raise ValueError('`validation_steps` should not be specified if '

~/anaconda3/envs/py3-TF2/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_v2.py in _process_inputs(model, x, y, batch_size, epochs, sample_weights, class_weights, shuffle, steps, distribution_strategy, max_queue_size, workers, use_multiprocessing)
    604       max_queue_size=max_queue_size,
    605       workers=workers,
--> 606       use_multiprocessing=use_multiprocessing)
    607   # As a fallback for the data type that does not work with
    608   # _standardize_user_data, use the _prepare_model_with_inputs.

~/anaconda3/envs/py3-TF2/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/data_adapter.py in __init__(self, x, y, sample_weights, batch_size, epochs, steps, shuffle, **kwargs)
    252     if not batch_size:
    253       raise ValueError(
--> 254           "`batch_size` or `steps` is required for `Tensor` or `NumPy`"
    255           " input data.")
    256 

ValueError: `batch_size` or `steps` is required for `Tensor` or `NumPy` input data.
ValueError: The `batch_size` argument must not be specified for the given input type. Received input: <BatchDataset shapes: ((None, 28, 28, 1), (None,)), types: (tf.float32, tf.int64)>, batch_size: 128
但是现在,我得到了以下错误

-------------------------------------------------------------------------

--
ValueError                                Traceback (most recent call last)
<ipython-input-58-c083185dafc6> in <module>
      1 NUM_EPOCHS = 5
----> 2 model.fit(train_data, epochs=NUM_EPOCHS, validation_data=(validation_inputs,validation_targets))

~/anaconda3/envs/py3-TF2/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
    726         max_queue_size=max_queue_size,
    727         workers=workers,
--> 728         use_multiprocessing=use_multiprocessing)
    729 
    730   def evaluate(self,

~/anaconda3/envs/py3-TF2/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_v2.py in fit(self, model, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, **kwargs)
    222           validation_data=validation_data,
    223           validation_steps=validation_steps,
--> 224           distribution_strategy=strategy)
    225 
    226       total_samples = _get_total_number_of_samples(training_data_adapter)

~/anaconda3/envs/py3-TF2/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_v2.py in _process_training_inputs(model, x, y, batch_size, epochs, sample_weights, class_weights, steps_per_epoch, validation_split, validation_data, validation_steps, shuffle, distribution_strategy, max_queue_size, workers, use_multiprocessing)
    562                                     class_weights=class_weights,
    563                                     steps=validation_steps,
--> 564                                     distribution_strategy=distribution_strategy)
    565     elif validation_steps:
    566       raise ValueError('`validation_steps` should not be specified if '

~/anaconda3/envs/py3-TF2/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_v2.py in _process_inputs(model, x, y, batch_size, epochs, sample_weights, class_weights, shuffle, steps, distribution_strategy, max_queue_size, workers, use_multiprocessing)
    604       max_queue_size=max_queue_size,
    605       workers=workers,
--> 606       use_multiprocessing=use_multiprocessing)
    607   # As a fallback for the data type that does not work with
    608   # _standardize_user_data, use the _prepare_model_with_inputs.

~/anaconda3/envs/py3-TF2/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/data_adapter.py in __init__(self, x, y, sample_weights, batch_size, epochs, steps, shuffle, **kwargs)
    252     if not batch_size:
    253       raise ValueError(
--> 254           "`batch_size` or `steps` is required for `Tensor` or `NumPy`"
    255           " input data.")
    256 

ValueError: `batch_size` or `steps` is required for `Tensor` or `NumPy` input data.
ValueError: The `batch_size` argument must not be specified for the given input type. Received input: <BatchDataset shapes: ((None, 28, 28, 1), (None,)), types: (tf.float32, tf.int64)>, batch_size: 128
ValueError:不能为给定的输入类型指定'batch\u size'参数。接收到的输入:,批次大小:128

您需要指定批量大小,即每次迭代应包含多少个数据点。如果查看文档,您将看到没有设置默认值

可以通过将batch_size添加到fit命令来设置该值。好的值通常是沿2**n线的数字,因为这允许使用多个核进行更有效的处理。但对你来说,这不会有太大的区别:)


tf文档将为您提供更多错误原因的线索

对于前两种情况,必须提供批次大小。对于最后一种情况,必须提供验证步骤

因为您已经批处理验证数据集,请考虑直接使用它,并指定如下验证步骤。

BATCH_SIZE = 100
train_data = train_data.batch(BATCH_SIZE)
validation_data = validation_data.batch(BATCH_SIZE)
...
model.fit(train_data, epochs=NUM_EPOCHS, validation_data=validation_data,validation_steps=1)

为什么没人提到我不知道,但你的问题是你的训练数据。您不能将其作为参数提供给您的模型

model.fit(X_Train, y_train, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None, validation_freq=1, max_queue_size=10, workers=1, use_multiprocessing=False)
您提供的不是y_培训:

model.fit(train_data, batch_size=128 ....
得到一个错误,说:

ValueError: `batch_size` or `steps` is required for `Tensor` or `NumPy` input data.
我希望它能有所帮助。

model.fit(训练数据,历元数=NUM历元,验证数据=(验证输入,验证目标),verbose=2)
更改为(通过添加validation_steps=1)将实现此目的

model.fit(训练数据,历元数=NUM历元数,验证数据=(验证输入,验证目标),验证步骤=1,详细度=2)

我将
input\u shape=(28,28,1)
更改为
input\u shape=(28,28,3)
,它对我有效。

train\u data=train\u data.batch(batch\u SIZE)返回什么?一批?批处理的迭代器?尝试输入一个简单的元组numpy数组,其形式为
(X\u train,y\u train)
,以及batch\u size参数,应该可以。至于batch\u size的新错误,原因如下------batch\u size:整数或无。每次渐变更新的采样数。如果未指定,批次大小将默认为32。如果数据以符号张量、数据集、生成器或keras.utils.Sequence实例的形式存在(因为它们生成批次),请不要指定批次大小。通过添加validation_steps参数,我也面临着确切的问题,问题得到了解决。描述中说,如果没有指定,它将继续,直到验证数据耗尽,但似乎不起作用。相反,这些步骤很有效,谢谢你的帮助。我是tensorflow的新手,正在努力学习。当我没有批处理验证数据集时,我得到了关于验证数据集形状的错误。请您在代码片段中解释一下,为什么
validation\u steps=1
而不是其他数字?@thinkdeep这只是一个例子,
validation\u steps
是根据数据集评估模型的步骤数(样本批次)。任何小于评估数据集批次总数的数字都可以。如果您清楚问题/错误,请发布答案。似乎
train\u data
是生成器,它的输出是
input
output
list
。回答新用户时请遵循指南。请在发帖或回答之前阅读行为准则?@ankish bansal和santosh aryal/我对我的回答很有信心,这是我的第一条信息,你试图不礼貌地劝阻我。我只是新来的,不是在数据科学。只需查看链接:它与Keras是相同的MNIST数据集:。此外,生成器应该是这样的:('tr_dataset=tf.data.dataset.from_tensor_切片((tr_数据,tr_标签)))您在他的代码中看到了什么?他只有:('train_data=train_data.batch(batch_SIZE)'),他的Y_培训在哪里。请不要劝阻人们分享信息不不,这不是关于让人泄气的新来者,许多新用户正在发帖或回复,但他们正因为自己的帖子而被否决。因此,我建议写一份清晰的解决方案,这样这些解决方案也能帮助其他人。然而,这篇文章有一个公认的答案,所以我建议你对你的答案做出解释。你的信心真是太好了。@santosh aryal好的,谢谢你花时间和解释。抱歉,如果我也很兴奋回答你的话。但是你知道我不这么认为。这是一个愚蠢的回答。我已经在Keras(为我)写了一个项目,并且确实看到他正在遭受类似的痛苦,并且分享了我的想法。正如我所说的,不是数据科学的初学者,但当然也可以说是远方的专家。无论如何,谢谢。
ValueError: `batch_size` or `steps` is required for `Tensor` or `NumPy` input data.