model.fit () приводит к ошибке 'TypeError: объект' модуль 'не вызывается' - PullRequest
0 голосов
/ 08 мая 2020

У меня возникает ошибка TypeError каждый раз, когда я пытаюсь обучить свою модель с помощью tensorflow. Пока:

history = model.fit(train_batches,
                    steps_per_epoch=train_steps,
                    class_weight=class_weights,
                    validation_data=validation_batches,
                    validation_steps=val_steps,
                    epochs=30,
                    verbose=1,
                    callbacks=callbacks_list
                    )

дает мне следующую ошибку:

Traceback (most recent call last):
  File "/home/brian/Desktop/381-deep-learning/main.py", line 359, in <module>
    callbacks=callbacks_list
  File "/home/brian/Desktop/381-deep-learning/venv/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py", line 66, in _method_wrapper
    return method(self, *args, **kwargs)
  File "/home/brian/Desktop/381-deep-learning/venv/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py", line 815, in fit
    model=self)
  File "/home/brian/Desktop/381-deep-learning/venv/lib/python3.6/site-packages/tensorflow/python/keras/engine/data_adapter.py", line 1112, in __init__
    model=model)
  File "/home/brian/Desktop/381-deep-learning/venv/lib/python3.6/site-packages/tensorflow/python/keras/engine/data_adapter.py", line 772, in __init__
    peek, x = self._peek_and_restore(x)
  File "/home/brian/Desktop/381-deep-learning/venv/lib/python3.6/site-packages/tensorflow/python/keras/engine/data_adapter.py", line 830, in _peek_and_restore
    peek = next(x)
  File "/home/brian/Desktop/381-deep-learning/venv/lib/python3.6/site-packages/keras_preprocessing/image/iterator.py", line 104, in __next__
    return self.next(*args, **kwargs)
  File "/home/brian/Desktop/381-deep-learning/venv/lib/python3.6/site-packages/keras_preprocessing/image/iterator.py", line 116, in next
    return self._get_batches_of_transformed_samples(index_array)
  File "/home/brian/Desktop/381-deep-learning/venv/lib/python3.6/site-packages/keras_preprocessing/image/iterator.py", line 239, in _get_batches_of_transformed_samples
    x = self.image_data_generator.standardize(x)
  File "/home/brian/Desktop/381-deep-learning/venv/lib/python3.6/site-packages/keras_preprocessing/image/image_data_generator.py", line 704, in standardize
    x = self.preprocessing_function(x)
TypeError: 'module' object is not callable

Вот определение моей модели:

resnet = tf.keras.applications.inception_resnet_v2.InceptionResNetV2()
predictions_layer = tf.keras.layers.Dense(7, activation='softmax')(x)

# Create an Image Data Generator to input later into our model.
data_generation = ImageDataGenerator(
    # Use Inception ResNet v2
    preprocessing_function=tf.keras.applications.inception_resnet_v2
)


model = tf.keras.Model(inputs=resnet.input, outputs=predictions_layer)

Все до этого момента работало хорошо, и я дважды проверил все свои операторы импорта (из-за которых обычно возникает эта ошибка), и, похоже, все под контролем:

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'

import pandas as pd
import numpy as np
import shutil
import tensorflow as tf
from tensorflow.keras.layers import Dense, Dropout
from tensorflow.keras.optimizers import SGD
from tensorflow.keras.metrics import categorical_crossentropy
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Model
from tensorflow.keras.callbacks import EarlyStopping, ReduceLROnPlateau, ModelCheckpoint


from sklearn.metrics import confusion_matrix
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from sklearn.model_selection import train_test_split

from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True

Некоторые вещи, которые я пробовал до сих пор, понижают версии Tensorflow ( 2.2.0 -> 1.15.2) и Керас (2.3.1 -> 1.2.2); единственная разница, которую я получаю при этом, - моя модель доживает до первой эпохи, но затем терпит неудачу с той же ошибкой.

Кроме того, если это имеет значение, вот метод, который я использовал для компиляции моей модели:

model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=0.0007), loss='categorical_crossentropy',
              metrics=[tf.keras.metrics.categorical_accuracy])

Как и проблемный c callbacks_list, о котором идет речь (однако после использования отладчика Pycharm значение этого списка соответствует ожиданиям):

checkpoint = tf.keras.callbacks.ModelCheckpoint(filepath, monitor='categorical_accuracy', verbose=1,
                             save_best_only=True, mode='max')

reduce_lr = tf.keras.callbacks.ReduceLROnPlateau(monitor='categorical_accuracy', factor=0.5, patience=2,
                                   verbose=1, mode='max', min_lr=0.00001)

callbacks_list = [checkpoint, reduce_lr]

Я также предоставил pastebin всего файла на случай, если я пропустил что-то важное, что может усугубить проблему: https://pastebin.com/raw/XCWj0b78

1 Ответ

0 голосов
/ 09 мая 2020

Я вызывал модуль вместо класса, содержащегося в модуле.

# Create an Image Data Generator to input later into our model.
data_generation = ImageDataGenerator(
    # Use Inception ResNet v2
    preprocessing_function=tf.keras.applications.inception_resnet_v2.preprocess_input
)

Чтение документации привело меня к использованию функции .preprocess_input () в моем генераторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...