【问题标题】:Error - Multi-Classification Neural Network using Keras错误 - 使用 Keras 的多分类神经网络
【发布时间】:2018-10-15 14:19:46
【问题描述】:

我从我的 NN 代码中收到一个相当烦人的错误,我希望对 Keras 工作原理有更深入了解的人可以向我解释为什么我会收到该错误。我很感激任何帮助! 错误:

AttributeError: 'DirectoryIterator' object has no attribute 'ndim'

错误来自:

    Traceback (most recent call last):
    File "C:\Users\Cameron\Desktop\AI\CubeFieldNN_Train -fix.py", line 80, in <module>
    validation_steps = (validation_samples / batch_size))

代码:

NN.fit(
train_set, train_labels,
batch_size = batch_size,
epochs = epochs,
validation_data = (validation_set, validation_labels),
validation_steps = (validation_samples / batch_size))

完整代码:https://pastebin.com/V1YwJW3X

完全错误:

    Traceback (most recent call last):
  File "C:\Users\Cameron\Desktop\AI\CubeFieldNN_Train -fix.py", line 80, in <module>
    validation_steps = (validation_samples / batch_size))
  File "C:\Python\lib\site-packages\keras\models.py", line 1002, in fit
    validation_steps=validation_steps)
  File "C:\Python\lib\site-packages\keras\engine\training.py", line 1630, in fit
    batch_size=batch_size)
  File "C:\Python\lib\site-packages\keras\engine\training.py", line 1476, in _standardize_user_data
    exception_prefix='input')
  File "C:\Python\lib\site-packages\keras\engine\training.py", line 76, in _standardize_input_data
    data = [np.expand_dims(x, 1) if x is not None and x.ndim == 1 else x for x in data]
  File "C:\Python\lib\site-packages\keras\engine\training.py", line 76, in <listcomp>
    data = [np.expand_dims(x, 1) if x is not None and x.ndim == 1 else x for x in data]
AttributeError: 'DirectoryIterator' object has no attribute 'ndim'

【问题讨论】:

    标签: python compiler-errors keras conv-neural-network


    【解决方案1】:

    fit_generatorprevious question 转换到 fit 并不是真正必要的。 flow_from_directory 返回一个生成器类型对象,该对象返回数据和标签的元组。 validation_set 也是如此。另请注意,如果您指定validation_steps,您还必须指定steps_per_epoch。因此,您可以使用:

    NN.fit_generator(train_set,
                     steps_per_epoch=steps_per_epoch,
                     epochs=epochs,
                     validation_data=validation_set,
                     validation_steps=validation_steps)
    

    或者,您可以一次加载所有图像并将其与标签一起传递给NN.fit() 函数。

    【讨论】:

    • 我没有意识到他们也退回了标签,非常感谢您指出这一点。谢谢!
    • 好吧,也许我确实知道它返回了标签。虽然,它没有正确返回它们。训练后,我得到奇怪的答案,例如“[[0.000000e+00 7.721626e-16 0.000000e+00]]”而不是 [0,1,0]。你会碰巧知道为什么会这样吗?
    • 这是一个预期的输出。请记住,您的最后一层是sigmoid 层。要获得课程,您可以在输出上调用argmax 函数或使用model.predict_classes() 来接收这些课程。因此,您将收到 [1] 而不是 [0.2, 0.7, 0.1],而不是 [0.0, 0.3, 0.7] 您将收到 [2] 等等。
    • 按照 TF 文档,应该使用 fit() (目前)。更多信息在这里:TF Documentation
    猜你喜欢
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 2019-07-10
    • 2019-08-06
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多