Tensorflow дает политику Unknow Dtype

Я пытаюсь обучить модель в Colab, а затем передать ее в Kaggle. Модель, кажется, отлично работает в Colab как модель .h5. Проблема, похоже, связана с Efficient net B4 и после в Kaggle. Документации по этому поводу нет. Я тренирую эту модель на TPU и делаю вывод на GPU, но даже если я тренирую модель на GPU, эта проблема существует.

Мой журнал ошибок

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-2-2ca8d6accabd> in <module>
     10 policy = mixed_precision.Policy('mixed_bfloat16')
     11 mixed_precision.set_policy(policy)
---> 12 model = tf.keras.models.load_model(r"../input/model-for-training/effieceintnettpurandomcrop.h5")
     13 
     14 model.summary()

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/saving/save.py in load_model(filepath, custom_objects, compile)
    182     if (h5py is not None and (
    183         isinstance(filepath, h5py.File) or h5py.is_hdf5(filepath))):
--> 184       return hdf5_format.load_model_from_hdf5(filepath, custom_objects, compile)
    185 
    186     if sys.version_info >= (3, 4) and isinstance(filepath, pathlib.Path):

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/saving/hdf5_format.py in load_model_from_hdf5(filepath, custom_objects, compile)
    176     model_config = json.loads(model_config.decode('utf-8'))
    177     model = model_config_lib.model_from_config(model_config,
--> 178                                                custom_objects=custom_objects)
    179 
    180     # set weights

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/saving/model_config.py in model_from_config(config, custom_objects)
     53                     '`Sequential.from_config(config)`?')
     54   from tensorflow.python.keras.layers import deserialize  # pylint: disable=g-import-not-at-top
---> 55   return deserialize(config, custom_objects=custom_objects)
     56 
     57 

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/layers/serialization.py in deserialize(config, custom_objects)
    107       module_objects=globs,
    108       custom_objects=custom_objects,
--> 109       printable_module_name='layer')

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/utils/generic_utils.py in deserialize_keras_object(identifier, module_objects, custom_objects, printable_module_name)
    371             custom_objects=dict(
    372                 list(_GLOBAL_CUSTOM_OBJECTS.items()) +
--> 373                 list(custom_objects.items())))
    374       with CustomObjectScope(custom_objects):
    375         return cls.from_config(cls_config)

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/sequential.py in from_config(cls, config, custom_objects)
    396     for layer_config in layer_configs:
    397       layer = layer_module.deserialize(layer_config,
--> 398                                        custom_objects=custom_objects)
    399       model.add(layer)
    400     if (not model.inputs and build_input_shape and

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/layers/serialization.py in deserialize(config, custom_objects)
    107       module_objects=globs,
    108       custom_objects=custom_objects,
--> 109       printable_module_name='layer')

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/utils/generic_utils.py in deserialize_keras_object(identifier, module_objects, custom_objects, printable_module_name)
    373                 list(custom_objects.items())))
    374       with CustomObjectScope(custom_objects):
--> 375         return cls.from_config(cls_config)
    376     else:
    377       # Then `cls` may be a function returning a class.

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer.py in from_config(cls, config)
    653         A layer instance.
    654     """
--> 655     return cls(**config)
    656 
    657   def compute_output_shape(self, input_shape):

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/layers/normalization.py in __init__(self, axis, momentum, epsilon, center, scale, beta_initializer, gamma_initializer, moving_mean_initializer, moving_variance_initializer, beta_regularizer, gamma_regularizer, beta_constraint, gamma_constraint, renorm, renorm_clipping, renorm_momentum, fused, trainable, virtual_batch_size, adjustment, name, **kwargs)
    198                **kwargs):
    199     super(BatchNormalizationBase, self).__init__(
--> 200         name=name, **kwargs)
    201     if isinstance(axis, (list, tuple)):
    202       self.axis = axis[:]

/opt/conda/lib/python3.7/site-packages/tensorflow/python/training/tracking/base.py in _method_wrapper(self, *args, **kwargs)
    454     self._self_setattr_tracking = False  # pylint: disable=protected-access
    455     try:
--> 456       result = method(self, *args, **kwargs)
    457     finally:
    458       self._self_setattr_tracking = previous_value  # pylint: disable=protected-access

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer.py in __init__(self, trainable, name, dtype, dynamic, **kwargs)
    336     # fields, like the loss scale, are used by Models. For subclassed networks,
    337     # the compute and variable dtypes are used as like any ordinary layer.
--> 338     self._set_dtype_policy(dtype)
    339     # Boolean indicating whether the layer automatically casts its inputs to the
    340     # layer's compute_dtype.

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer.py in _set_dtype_policy(self, dtype)
   1986       self._dtype_policy = dtype
   1987     elif isinstance(dtype, dict):
-> 1988       self._dtype_policy = policy.deserialize(dtype)
   1989     elif dtype:
   1990       self._dtype_policy = policy.Policy(dtypes.as_dtype(dtype).name)

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/mixed_precision/experimental/policy.py in deserialize(config, custom_objects)
    628       module_objects=module_objects,
    629       custom_objects=custom_objects,
--> 630       printable_module_name='dtype policy')

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/utils/generic_utils.py in deserialize_keras_object(identifier, module_objects, custom_objects, printable_module_name)
    360     config = identifier
    361     (cls, cls_config) = class_and_config_for_serialized_keras_object(
--> 362         config, module_objects, custom_objects, printable_module_name)
    363 
    364     if hasattr(cls, 'from_config'):

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/utils/generic_utils.py in class_and_config_for_serialized_keras_object(config, module_objects, custom_objects, printable_module_name)
    319   cls = get_registered_object(class_name, custom_objects, module_objects)
    320   if cls is None:
--> 321     raise ValueError('Unknown ' + printable_module_name + ': ' + class_name)
    322 
    323   cls_config = config['config']

ValueError: Unknown dtype policy: PolicyV1

Код обучения моей модели:

import tensorflow as tf
from tensorflow.keras.mixed_precision import experimental as mixed_precision
from tensorflow.keras.layers import BatchNormalization
from tensorflow.keras.regularizers import l1

policy = mixed_precision.Policy('mixed_bfloat16')
mixed_precision.set_policy(policy)
reg = l1(0.001)

with strategy.scope():
    base_model = tf.keras.applications.EfficientNetB3(weights = "imagenet", include_top=False)
    base_model.trainable = True

    model = tf.keras.Sequential([
        tf.keras.layers.BatchNormalization(),
        base_model,
        BatchNormalization(),
        tf.keras.layers.LeakyReLU(),
        tf.keras.layers.GlobalAveragePooling2D(),
        tf.keras.layers.Dense(256),
        BatchNormalization(),

        tf.keras.layers.LeakyReLU(),
        BatchNormalization(),

        tf.keras.layers.Dense(128),
        BatchNormalization(),

        tf.keras.layers.LeakyReLU(),
        BatchNormalization(),

        tf.keras.layers.Dropout(0.4),
        BatchNormalization(),

        tf.keras.layers.Dense(64),
        BatchNormalization(),

        tf.keras.layers.LeakyReLU(),
        tf.keras.layers.Dense(32),
        BatchNormalization(),

        tf.keras.layers.Dropout(0.4),

        tf.keras.layers.LeakyReLU(),
        tf.keras.layers.Dense(16),

        tf.keras.layers.LeakyReLU(),
        tf.keras.layers.Dense(8),
        tf.keras.layers.LeakyReLU(),
        tf.keras.layers.Dense(len(CLASSES), activation='softmax')
    ])

    model.compile(
        optimizer=tf.keras.optimizers.SGD(lr=0.04),
        loss='sparse_categorical_crossentropy',
        metrics=['sparse_categorical_accuracy'])

from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping

early = EarlyStopping(monitor='val_loss',
                      mode='min',
                      patience=5)
STEPS_PER_EPOCH = 17118 // BATCH_SIZE
VALID_STEPS = 4279 // BATCH_SIZE
checkpoint_filepath = 'gs://mithil/tmp/checkpoint_temp'
model_checkpoint_callback = tf.keras.callbacks.ModelCheckpoint(
    filepath=checkpoint_filepath,
    save_weights_only=True,
    monitor='val_sparse_categorical_accuracy',
    mode='max',
    save_best_only=True)

history = model.fit(train_dataset,
                    steps_per_epoch=STEPS_PER_EPOCH,

                    epochs=25,
                    validation_data=valid_dataset,
                    validation_steps=VALID_STEPS, callbacks=[early,model_checkpoint_callback])
model.load_weights(checkpoint_filepath)

Код вывода

import tensorflow as tf
import numpy as np
import os
import pandas as pd
import cv2
from collections import Counter
from tensorflow.keras.mixed_precision import experimental as mixed_precision

from tensorflow.keras.regularizers import l1
policy = mixed_precision.Policy('mixed_bfloat16')
mixed_precision.set_policy(policy)
model = tf.keras.models.load_model(r"../input/model-for-training/effieceintnettpurandomcrop.h5")

model.summary()
path = "../input/cassava-leaf-disease-classification/test_images"

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
459
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Была такая же проблема, когда я сохранил модель с tf-версией 2.4 и загрузил ее с tf-версией 2.3. Исправил это обновлением до 2.4.

Может быть полезно для тех, кто наткнется на этот вопрос из Google.

То, что утверждает геббиссимо, верно.

Если вы настаиваете на использовании tensorflow 2.3, вы можете воссоздать модель в tensorflow 2.3 в коде. Затем вы можете загрузить веса с помощью model.load_weights() с тем же файлом h5.

Затем вы можете использовать модель для вывода. Если вы не хотите пересоздавать модель каждый раз, вы можете model.save_model() после загрузки весов в tf 2.3.

Сохраненная модель будет совместима с tensorflow 2.3 и tensorflow 2.4.

Другие вопросы по теме