如何修复 tensorflow 中的“ValueError:空训练数据”错误

Posted

技术标签:

【中文标题】如何修复 tensorflow 中的“ValueError:空训练数据”错误【英文标题】:How to fix 'ValueError: Empty Training Data' error in tensorflow 【发布时间】:2019-11-12 14:15:24 【问题描述】:

我是 tensorflow 和 keras 的新手。我正在尝试训练一个模型来识别石头和剪刀的不同图像。我为此使用了一个在线教程,他们为我提供了一个谷歌协作工作表。当我在 google collab 上训练模型时,一切正常,但如果我尝试在我的机器上训练模型,它会给我这个错误: ValueValueError: Empty training data 我试过改变批量大小,也试过改变数据集中的图像数量,但没有帮助(而且不应该)。

这是我的代码:

###### ROCK PAPER SISSORS #######

import os
import numpy as np
import cv2
import tensorflow as tf
import keras_preprocessing
from keras_preprocessing import image
from keras_preprocessing.image import ImageDataGenerator
import matplotlib.pyplot as plt
# import matplotlib.image as mpimg


# Provide the path to the directory of the classes
rock_dir = os.path.join('/media/visheshchanana/New Volume/Projects/datasets/RPS/rps/rock')
paper_dir = '/media/visheshchanana/New Volume/Projects/datasets/RPS/rps/paper'
scissors_dir = '/media/visheshchanana/New Volume/Projects/datasets/RPS/rps/scissors'


rock_files = os.listdir(rock_dir)
# print(rock_files[:10])
#  ​
paper_files = os.listdir(paper_dir)
# print(paper_files[:10])
# ​
scissors_files = os.listdir(scissors_dir)
# # print(scissors_files[:10])



# Use the augmentation tool to change the augmentation of the images so that we can have a better classifier
TRAINING_DIR = "/media/visheshchanana/New Volume/Projects/datasets/RPS/rps"
training_datagen = ImageDataGenerator(
      rescale = 1./255,
      rotation_range=40,
      width_shift_range=0.2,
      height_shift_range=0.2,
      shear_range=0.2,
      zoom_range=0.2,
      horizontal_flip=True,
      fill_mode='nearest')

# Provide the path to the validation dataset
VALIDATION_DIR = "/media/visheshchanana/New Volume/Projects/datasets/RPS/RPS_validation"
validation_datagen = ImageDataGenerator(rescale = 1./255)

train_generator = training_datagen.flow_from_directory(
    TRAINING_DIR,
    target_size=(150,150),
    class_mode='categorical'
)

validation_generator = validation_datagen.flow_from_directory(
    VALIDATION_DIR,
    target_size=(150,150),
    class_mode='categorical'
)

model = tf.keras.models.Sequential([
    # Note the input shape is the desired size of the image 150x150 with 3 bytes color
    # This is the first convolution
    tf.keras.layers.Conv2D(64, (3,3), activation='relu', input_shape=(150, 150, 3)),
    tf.keras.layers.MaxPooling2D(2, 2),
    # The second convolution
    tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2,2),
    # The third convolution
    tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2,2),
    # The fourth convolution
    tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2,2),
    # Flatten the results to feed into a DNN
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dropout(0.5),
    # 512 neuron hidden layer
    tf.keras.layers.Dense(512, activation='relu'),
    tf.keras.layers.Dense(3, activation='softmax')
])


model.summary()
model.compile(loss = 'categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])

history = model.fit_generator(train_generator, epochs=5, validation_data = validation_generator, verbose = 1)


数据集与谷歌合作中使用的相同。我无法弄清楚这个错误背后的原因。

【问题讨论】:

听起来您的数据集路径不正确。您是否更新了数据集的路径以反映您机器上的路径?您可以从文件本身复制绝对路径并将其直接粘贴到代码中。 @wakeel 路径正确。它在近 1 个 epoch 中运行良好,然后抛出此错误。另外,我可以绘制图像。 我不知道这是否真的完全回答了你的问题,但是当我出于自己的痛苦偶然发现这个问题时,我意识到我的批次大小大于我的样本大小。如果有帮助,我可以给出答案,但在我确定这是一个解决方案之前,我暂时将其作为评论。 @mehmet.ali.anil 谢谢伙计,这是我的问题,它让我发疯了!!!你一定要回答 @pcko1 好的(:很高兴它有帮助。 【参考方案1】:

这个错误可能还有其他原因,但我意识到我的批量大小大于我的样本大小

【讨论】:

谢谢你!由于 batch_size 大于我的训练样本,我遇到了同样的问题。 IE。 batch_size > train_feature.shape[0]【参考方案2】:

我遇到了同样的问题。我的模型在第一个 epoch 结束时训练并给出了这个错误(ValueValueError: Empty training data)。我发现这是因为验证路径中没有数据。

【讨论】:

【参考方案3】:

检查 steps_per_epoch 是否未设置为 0(例如因为整数除法)

【讨论】:

以上是关于如何修复 tensorflow 中的“ValueError:空训练数据”错误的主要内容,如果未能解决你的问题,请参考以下文章

如何修复由 Pycharm 中的 Tensorflow 引起的 cudart64_110.dll 错误?

如何修复Tensorflow中的“ValueError:操作数无法与形状(2592,)(4,)一起广播”?

如何在TensorFlow中用深度学习修复图像

如何修复无法在 Conda 上加载本机 Tensorflow 运行时

如何使用 Tensorflow-GPU 和 Keras 修复低挥发性 GPU-Util?

如何修复 AttributeError:模块 'tensorflow' 没有属性 'keras'?