Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python &引用;ValueError:未知激活:激活“;尝试加载带有自定义对象的模型时_Python_Tensorflow_Keras - Fatal编程技术网

Python &引用;ValueError:未知激活:激活“;尝试加载带有自定义对象的模型时

Python &引用;ValueError:未知激活:激活“;尝试加载带有自定义对象的模型时,python,tensorflow,keras,Python,Tensorflow,Keras,我试图加载一个带有两个自定义对象的模型,但标题中出现了这个错误 这是我导入/定义我的函数的地方,也是我允许keras按名称引用它们的地方 from tensorflow.keras.utils import get_custom_objects from tensorflow.python.keras.layers import LeakyReLU from tensorflow.keras.layers import Activation from tensorflow.keras.backe

我试图加载一个带有两个自定义对象的模型,但标题中出现了这个错误

这是我导入/定义我的函数的地方,也是我允许keras按名称引用它们的地方

from tensorflow.keras.utils import get_custom_objects
from tensorflow.python.keras.layers import LeakyReLU
from tensorflow.keras.layers import Activation
from tensorflow.keras.backend import sigmoid


def swish(x, beta=1):
    return x * sigmoid(beta * x)


get_custom_objects().update({'swish': Activation(swish)})
get_custom_objects().update({'lrelu': LeakyReLU()})
我用这个零件加载模型

from tensorflow.keras.models import load_model
model = load_model('model.h5', custom_objects={'swish': Activation(swish), 'lrelu': LeakyReLU()}, compile=False)
我得到以下错误:

Traceback (most recent call last):
  File "C:\Users\Ben\PycharmProjects\untitled\trainer.py", line 102, in load_items
    model = load_model(data_loc + 'model.h5', custom_objects={'swish': Activation(swish), 'lrelu': LeakyReLU()}, compile=False)
  File "C:\Users\Ben\PycharmProjects\untitled\venv\lib\site-packages\tensorflow_core\python\keras\saving\save.py", line 146, in load_model
    return hdf5_format.load_model_from_hdf5(filepath, custom_objects, compile)
  File "C:\Users\Ben\PycharmProjects\untitled\venv\lib\site-packages\tensorflow_core\python\keras\saving\hdf5_format.py", line 168, in load_model_from_hdf5
    custom_objects=custom_objects)
  File "C:\Users\Ben\PycharmProjects\untitled\venv\lib\site-packages\tensorflow_core\python\keras\saving\model_config.py", line 55, in model_from_config
    return deserialize(config, custom_objects=custom_objects)
  File "C:\Users\Ben\PycharmProjects\untitled\venv\lib\site-packages\tensorflow_core\python\keras\layers\serialization.py", line 102, in deserialize
    printable_module_name='layer')
  File "C:\Users\Ben\PycharmProjects\untitled\venv\lib\site-packages\tensorflow_core\python\keras\utils\generic_utils.py", line 191, in deserialize_keras_object
    list(custom_objects.items())))
  File "C:\Users\Ben\PycharmProjects\untitled\venv\lib\site-packages\tensorflow_core\python\keras\engine\sequential.py", line 369, in from_config
    custom_objects=custom_objects)
  File "C:\Users\Ben\PycharmProjects\untitled\venv\lib\site-packages\tensorflow_core\python\keras\layers\serialization.py", line 102, in deserialize
    printable_module_name='layer')
  File "C:\Users\Ben\PycharmProjects\untitled\venv\lib\site-packages\tensorflow_core\python\keras\utils\generic_utils.py", line 193, in deserialize_keras_object
    return cls.from_config(cls_config)
  File "C:\Users\Ben\PycharmProjects\untitled\venv\lib\site-packages\tensorflow_core\python\keras\engine\base_layer.py", line 594, in from_config
    return cls(**config)
  File "C:\Users\Ben\PycharmProjects\untitled\venv\lib\site-packages\tensorflow_core\python\keras\layers\core.py", line 361, in __init__
    self.activation = activations.get(activation)
  File "C:\Users\Ben\PycharmProjects\untitled\venv\lib\site-packages\tensorflow_core\python\keras\activations.py", line 321, in get
    identifier, printable_module_name='activation')
  File "C:\Users\Ben\PycharmProjects\untitled\venv\lib\site-packages\tensorflow_core\python\keras\utils\generic_utils.py", line 180, in deserialize_keras_object
    config, module_objects, custom_objects, printable_module_name)
  File "C:\Users\Ben\PycharmProjects\untitled\venv\lib\site-packages\tensorflow_core\python\keras\utils\generic_utils.py", line 165, in class_and_config_for_serialized_keras_object
    raise ValueError('Unknown ' + printable_module_name + ': ' + class_name)
ValueError: Unknown activation: Activation

还值得注意的是,我正在尝试在不同环境的不同项目中保存和加载模型。两者都使用TF2.0.0 gpu。导入内容应该是一样的。

你不应该盲目相信互联网上的每一篇教程。正如我在评论中所说的,问题在于将激活函数作为
层传递(
激活
),它可以工作,但并不正确,因为在模型保存/加载过程中会出现问题:

def swish(x, beta = 1):
    return (x * K.sigmoid(beta * x))

get_custom_objects().update({'swish': Activation(swish)})

model = Sequential()
model.add(Dense(10, input_shape=(1,), activation="swish"))
上面的代码是不正确的,层内的激活不应该是另一层。使用此代码,我在
模型期间得到错误。使用TensorFlow 1.14中的
keras
tf.keras
保存
。正确的方法是:

def swish(x, beta = 1):
    return (x * K.sigmoid(beta * x))

get_custom_objects().update({'swish': swish})

model = Sequential()
model.add(Dense(10, input_shape=(1,), activation="swish"))
然后您将能够正确加载和保存模型。如果需要添加激活作为层,则应执行以下操作:

model.add(Activation("swish"))

这也将允许模型保存/加载很好。

我只使用以下代码行,它工作得很好

activation=tf.nn.swish

我以前看到过这个问题,你是否删除了你之前的问题?是的,我没有得到任何答案,所以我想重新发布,也许再添加一些信息。你不应该这样做,重新发布或多次询问同一问题是不允许的。你可以随时编辑自己的问题。我也不明白你为什么要将激活作为激活(swish)传递,你应该只传递函数,而不是一个层。我已经看到你应该在激活层中包装。