Есть ошибка атрибута, когда я собирался обучить мою модель, которая является объектом каталогов, не имеет формы атрибута? - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь запустить этот код, но все еще застрял с этой ошибкой, когда я собирался обучать свою модель, и выдал эту ошибку: AttributeError: у объекта 'DirectoryIterator' нет атрибута 'shape'

, если кто-то имел эту ошибку и исправьте ее, пожалуйста, дайте мне знать, как вы ее исправили.

Спасибо
(я использую pycharm)

     from tensorflow.keras.models import Sequential
     from tensorflow.keras.layers import Convolution2D
     from tensorflow.keras.layers import MaxPooling2D
     from tensorflow.keras.layers import Flatten
     from tensorflow.keras.layers import Dense
     import tensorflow as tf
     from pil import Image

     classifier = tf.keras.models.Sequential()

     classifier.add(tf.keras.layers.Convolution2D(filters=32, kernel_size=3, padding="same", 
     input_shape= (64,64, 3),activation='relu'))
     classifier.add(tf.keras.layers.MaxPooling2D(pool_size=2, strides=2, padding='valid'))


     classifier.add(tf.keras.layers.Convolution2D(filters=64, kernel_size=3, padding="same" , 
     activation="relu"))
     classifier.add(tf.keras.layers.MaxPooling2D(pool_size=2, strides=2, padding='valid'))


     classifier.add(tf.keras.layers.Flatten())


     classifier.add(tf.keras.layers.Dense(units=128, activation='relu'))
     classifier.add(tf.keras.layers.Dense(units=1, activation='sigmoid'))


     classifier.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
     classifier.summary()


     from keras.preprocessing.image import ImageDataGenerator

     train_datagen = ImageDataGenerator(rescale=1./255,
                                       shear_range=0.2,
                                       zoom_range=0.2,
                                       horizontal_flip=True)

     test_datagen = ImageDataGenerator(rescale=1./255,
                                      shear_range=0.2,
                                      zoom_range=0.2,
                                      horizontal_flip=True)

     training_set = train_datagen.flow_from_directory('dataset/training_set',
                                                     target_size=(64, 64),
                                                     batch_size=32,
                                                     class_mode='binary')

     test_set = test_datagen.flow_from_directory('dataset/test_set',
                                                target_size=(64, 64),
                                                batch_size=32,
                                                class_mode='binary')

     classifier.fit_generator(training_set,
                             steps_per_epoch=8000,
                             epochs=25,
                             validation_data=test_set,
                             validation_steps=2000)

Traceback (последний вызов был последним):

File "<input>", line 5, in <module>
      File "C:\Users\rahul\AppData\Local\Programs\Python\Python37\lib\site- 
 packages\tensorflow_core\python\keras\engine\training.py", line 1297, in fit_generator
        steps_name='steps_per_epoch')
      File "C:\Users\rahul\AppData\Local\Programs\Python\Python37\lib\site- 
 packages\tensorflow_core\python\keras\engine\training_generator.py", line 144, in model_iteration
        shuffle=shuffle)
      File "C:\Users\rahul\AppData\Local\Programs\Python\Python37\lib\site- 
 packages\tensorflow_core\python\keras\engine\training_generator.py", line 477, in  
 convert_to_generator_like
        num_samples = int(nest.flatten(data)[0].shape[0])
    AttributeError: 'DirectoryIterator' object has no attribute 'shape'

1 Ответ

0 голосов
/ 26 апреля 2020

здесь я обновляю код, но возникла другая ошибка, о которой я упоминал ниже

# Part 1 - Building the CNN

# importing the Keras libraries and packages

from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Convolution2D
from tensorflow.keras.layers import MaxPooling2D
from tensorflow.keras.layers import Flatten
from tensorflow.keras.layers import Dense, Dropout
#import tensorflow as tf


# Initialing the CNN
classifier = Sequential()

# Step 1 - Convolutional Layer
classifier.add(Convolution2D(filters=32, kernel_size=3, padding="same", input_shape = (64, 64, 3), activation = 'relu'))

# step 2 - Pooling
classifier.add(MaxPooling2D(pool_size =2, strides=2, padding='valid'))

# Adding second convolution layer
classifier.add(Convolution2D(filters=32, kernel_size=3,padding="same", activation = 'relu'))
classifier.add(MaxPooling2D(pool_size =2, strides=2, padding='valid'))

# Adding 3rd Concolution Layer
classifier.add(Convolution2D(filters=64, kernel_size=3,padding="same", activation = 'relu'))
classifier.add(MaxPooling2D(pool_size =2, strides=2, padding='valid'))

# Step 3 - Flattening
classifier.add(Flatten())

# Step 4 - Full Connection
classifier.add(Dense(units=256, activation = 'relu'))
classifier.add(Dropout(0.5))
classifier.add(Dense(units=26, activation = 'softmax'))

# Compiling The CNN
classifier.compile(optimizer = 'adam',loss = 'categorical_crossentropy', metrics = ['accuracy'])
classifier.summary()

# Part 2 Fittting the CNN to the image

from tensorflow.keras.preprocessing.image import ImageDataGenerator


train_datagen = ImageDataGenerator(rescale=1./255,
                                   shear_range=0.2,
                                   zoom_range=0.2,
                                   horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1./255)

training_set = train_datagen.flow_from_directory('F:/p/sign language recognition/Source Code/dataset/train',
                                                 target_size=(64, 64),
                                                 batch_size=32,
                                                 class_mode='categorical')

test_set = test_datagen.flow_from_directory('F:/p/sign language recognition/Source Code/dataset/test',
                                            target_size=(64, 64),
                                            batch_size=32,
                                            class_mode='categorical')


model = classifier.fit_generator(training_set,
                         steps_per_epoch=4972,
                         epochs=25,
                         validation_data = test_set,
                         validation_steps = 24)


#Saving the model
import h5py
classifier.save('Trained_model.h5')

'''print(classifier.history.keys())
import matplotlib.pyplot as plt
# summarize history for accuracy
plt.plot(model.history['acc'])
plt.plot(model.history['val_acc'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
# summarize history for loss

plt.plot(classifier.history['loss'])
plt.plot(classifier.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()'''

Traceback (последний вызов был последним):

File "F:/p/sign language recognition/Source Code/cnn_model.py", line 70, in <module>
    validation_steps = 24)
  File "C:\Users\rahul\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 1297, in fit_generator
    steps_name='steps_per_epoch')
  File "C:\Users\rahul\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\keras\engine\training_generator.py", line 265, in model_iteration
    batch_outs = batch_function(*batch_data)
  File "C:\Users\rahul\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 973, in train_on_batch
    class_weight=class_weight, reset_metrics=reset_metrics)
  File "C:\Users\rahul\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\keras\engine\training_v2_utils.py", line 253, in train_on_batch
    extract_tensors_from_dataset=True)
  File "C:\Users\rahul\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 2538, in _standardize_user_data
    y, self._feed_loss_fns, feed_output_shapes)
  File "C:\Users\rahul\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\keras\engine\training_utils.py", line 743, in check_loss_and_target_compatibility
    ' while using as loss `' + loss_name + '`. '
ValueError: A target array with shape (32, 24) was passed for an output of shape (None, 26) while using as loss `categorical_crossentropy`. This loss expects targets to have the same shape as the output.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...