错误: ‘ImageDataGenerator’ 对象没有 ‘shape’ 属性。

huangapple go评论98阅读模式
英文:

Error: 'ImageDataGenerator' object has no attribute 'shape'

问题

  1. 我是编程新手,一直在尝试编写用于图像分类的神经网络代码,但不幸的是,我遇到了这个错误:
  2. ```python
  3. import tensorflow as tf
  4. import tensorflow.keras as kr
  5. import os
  6. train_PATH='./Data/Entrenamiento/'
  7. valid_PATH='./Data/Validacion/'
  8. # 参数
  9. epocas=20
  10. alt,long=100,100
  11. batch_size=32
  12. pasos=1000
  13. pasos_valid=200
  14. n_filtroConv1=32
  15. n_filtroConv2=64
  16. 大小_filtro1=(3,3)
  17. 大小_filtro2=(2,2)
  18. 大小_pooling=(2,2)
  19. clases=3
  20. lr=0.0005
  21. # 图像预处理
  22. train_generador=kr.preprocessing.image.ImageDataGenerator(
  23. rescale=1./255,
  24. shear_range=0.3,
  25. zoom_range=0.3,
  26. horizontal_flip=True)
  27. valid_generador=kr.preprocessing.image.ImageDataGenerator(
  28. rescale=1./255)
  29. imagen_entrenamiento=train_generador.flow_from_directory(
  30. train_PATH,
  31. target_size=(alt,long),
  32. batch_size=batch_size,
  33. class_mode='categorical')
  34. imagen_validacion=valid_generador.flow_from_directory(
  35. valid_PATH,
  36. target_size=(alt,long),
  37. batch_size=batch_size,
  38. class_mode='categorical')
  39. # 创建卷积神经网络
  40. nn=kr.Sequential()
  41. nn.add(kr.layers.Convolution2D(n_filtroConv1,大小_filtro1,padding='same',input_shape=(alt,long,3),activation='relu'))
  42. nn.add(kr.layers.MaxPooling2D(pool_size=大小_pooling))
  43. nn.add(kr.layers.Convolution2D(n_filtroConv2,大小_filtro2,padding='same',activation='relu'))
  44. nn.add(kr.layers.MaxPooling2D(pool_size=大小_pooling))
  45. nn.add(kr.layers.Flatten())
  46. nn.add(kr.layers.Dense(256,activation='relu'))
  47. nn.add(kr.layers.Dropout(0.5))
  48. nn.add(kr.layers.Dense(clases,activation='softmax'))
  49. nn.compile(loss='categorical_crossentropy',optimizer=tf.keras.optimizers.Adam(lr=lr),metrics=['accuracy'])
  50. nn.fit_generator(train_generador,steps_per_epoch=pasos,epochs=epocas,validation_data=imagen_validacion,validation_steps=pasos_valid)
  51. dir_modelo='./modelo/'
  52. if not os.path.exists(dir_modelo):
  53. os.mkdir(dir_modelo)
  54. nn.save(dir_modelo+'modelo.h5')
  55. nn.save_weights(dir_modelo+'pesos.h5')
  56. 当我在Anaconda-Navigator上的Python 3.7中使用Spyder执行此代码时,我遇到了这个错误:
  57. ```python
  58. nn.fit_generator(train_generador,steps_per_epoch=pasos,epochs=epocas,validation_data=imagen_validacion,validation_steps=pasos_valid)
  59. File "/Applications/anaconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training.py", line 1297, in fit_generator
  60. steps_name='steps_per_epoch')
  61. File "/Applications/anaconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_generator.py", line 144, in model_iteration
  62. shuffle=shuffle)
  63. File "/Applications/anaconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_generator.py", line 477, in convert_to_generator_like
  64. num_samples = int(nest.flatten(data)[0].shape[0])
  65. AttributeError: 'ImageDataGenerator' object has no attribute 'shape'
英文:

I am new in coding and I've been trying to code this neural network for images classification, but unfortunately, I've encountered this error:

  1. import tensorflow as tf
  2. import tensorflow.keras as kr
  3. import os
  4. train_PATH='./Data/Entrenamiento/'
  5. valid_PATH='./Data/Validacion/'
  6. # Parámetros
  7. epocas=20
  8. alt,long=100,100
  9. batch_size=32
  10. pasos=1000
  11. pasos_valid=200
  12. n_filtroConv1=32
  13. n_filtroConv2=64
  14. tamaño_filtro1=(3,3)
  15. tamaño_filtro2=(2,2)
  16. tamaño_pooling=(2,2)
  17. clases=3
  18. lr=0.0005
  19. # Pre-procesamiento de imágenes
  20. train_generador=kr.preprocessing.image.ImageDataGenerator(
  21. rescale=1./255,
  22. shear_range=0.3,
  23. zoom_range=0.3,
  24. horizontal_flip=True)
  25. valid_generador=kr.preprocessing.image.ImageDataGenerator(
  26. rescale=1./255)
  27. imagen_entrenamiento=train_generador.flow_from_directory(
  28. train_PATH,
  29. target_size=(alt,long),
  30. batch_size=batch_size,
  31. class_mode='categorical')
  32. imagen_validacion=valid_generador.flow_from_directory(
  33. valid_PATH,
  34. target_size=(alt,long),
  35. batch_size=batch_size,
  36. class_mode='categorical')
  37. # Crear red convolucional
  38. nn=kr.Sequential()
  39. nn.add(kr.layers.Convolution2D(n_filtroConv1,tamaño_filtro1,padding='same',input_shape=(alt,long,3),activation='relu'))
  40. nn.add(kr.layers.MaxPooling2D(pool_size=tamaño_pooling))
  41. nn.add(kr.layers.Convolution2D(n_filtroConv2,tamaño_filtro2,padding='same',activation='relu'))
  42. nn.add(kr.layers.MaxPooling2D(pool_size=tamaño_pooling))
  43. nn.add(kr.layers.Flatten())
  44. nn.add(kr.layers.Dense(256,activation='relu'))
  45. nn.add(kr.layers.Dropout(0.5))
  46. nn.add(kr.layers.Dense(clases,activation='softmax'))
  47. nn.compile(loss='categorical_crossentropy',optimizer=tf.keras.optimizers.Adam(lr=lr),metrics=['accuracy'])
  48. nn.fit_generator(train_generador,steps_per_epoch=pasos,epochs=epocas,validation_data=imagen_validacion,validation_steps=pasos_valid)
  49. dir_modelo='./modelo/'
  50. if not os.path.exists(dir_modelo):
  51. os.mkdir(dir_modelo)
  52. nn.save(dir_modelo+'modelo.h5')
  53. nn.save_weights(dir_modelo+'pesos.h5')

When I execute this code on Spyder with Python 3.7 on Anaconda-Navigator, I'm facing with this error:

  1. nn.fit_generator(train_generador,steps_per_epoch=pasos,epochs=epocas,validation_data=imagen_validacion,validation_steps=pasos_valid)
  2. File "/Applications/anaconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training.py", line 1297, in fit_generator
  3. steps_name='steps_per_epoch')
  4. File "/Applications/anaconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_generator.py", line 144, in model_iteration
  5. shuffle=shuffle)
  6. File "/Applications/anaconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_generator.py", line 477, in convert_to_generator_like
  7. num_samples = int(nest.flatten(data)[0].shape[0])
  8. AttributeError: 'ImageDataGenerator' object has no attribute 'shape'

答案1

得分: 1

生成器是 imagen_entrenamiento,而不是 train_generator

使用 nn.fit_generator(imagen_entrenamiento,...)

英文:

The generator is imagen_entrenamiento, not train_generator.

Use nn.fit_generator(imagen_entrenamiento,...)

huangapple
  • 本文由 发表于 2020年1月6日 21:44:38
  • 转载请务必保留本文链接:https://go.coder-hub.com/59613222.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定