У меня возникает ошибка 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