#python #tensorflow #keras
Вопрос:
Я играл с увеличением данных для классификации изображений TensorFlow. Я использовал учебник, чтобы создать пользовательский класс увеличения, код ниже, а затем загрузил его в модель с помощью Keras Lamda. Обучение работает нормально, однако, когда я пытаюсь сохранить модель сразу после обучения, она выходит из строя с ошибкой, указанной в названии.
Я очень новичок в python, но, насколько я понимаю, класс должен иметь скрытое __ имя __ variabile. Что это дает?
Пользовательский класс дополнения
class CustomAugment(object):
def __call__(self, image):
# Random flips and grayscale with some stochasticity
img = self._random_apply(tf.image.flip_left_right, image, p=0.6)
img = self._random_apply(self._color_drop, img, p=0.9)
return img
def _color_drop(self, x):
image = tf.image.rgb_to_grayscale(x)
image = tf.tile(x, [1, 1, 1, 3])
return x
def _random_apply(self, func, x, p):
return tf.cond(
tf.less(tf.random.uniform([], minval=0, maxval=1, dtype=tf.float32),
tf.cast(p, tf.float32)),
lambda: func(x),
lambda: x)
data_augmentation = keras.Sequential(
[
tf.keras.layers.Lambda(CustomAugment()),
layers.experimental.preprocessing.RandomRotation(0.1),
]
)
Использование его в модели
model = Sequential([
tf.keras.Input(shape=(160, 160, 3)),
data_augmentation,
layers.Conv2D(16, 3, padding='same', activation='relu', input_shape=(160, 160, 3)),
layers.Conv2D(16, 3, padding='same', activation='relu'),
#rest of model here
Разбивается здесь
model.save('el_patho_maximo')
Ответ №1:
Это проблема с отступами. В _random_apply
, все строки, кроме первой, имеют неправильный отступ. Либо поместите его в одну строку, либо оставьте автоматически оставленное место.
Комментарии:
1. Спасибо за ответ., Исправлен отступ, но по-прежнему появляется ошибка.
Ответ №2:
Найдено решение проблемы
Мне пришлось просто добавить __ name __ (без пробелов) = CustomAugment в классе CustomAugment прямо перед __ init __
Комментарии:
1. Я не понимаю вашего решения. Не могли бы вы, пожалуйста, опубликовать, как вы это решили?
2. @JKnecht В классе CustomAugment из вопроса мне просто нужно было добавить еще одну строку, в которой говорилось
_name_='CustomAugment'
: я добавил строку сразу послеclass CustomAugment(object):