Python 由于';无法加载#U模型;未知激活功能:LeakyReLU';
我已经构建、安装并保存了以下模型:Python 由于';无法加载#U模型;未知激活功能:LeakyReLU';,python,tensorflow,keras,neural-network,relu,Python,Tensorflow,Keras,Neural Network,Relu,我已经构建、安装并保存了以下模型: import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers from tensorflow.keras import preprocessing from tensorflow.keras.models import Sequential import config from tensorflow.keras import applicatio
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras import preprocessing
from tensorflow.keras.models import Sequential
import config
from tensorflow.keras import applications
model = Sequential()
model.add(layers.Flatten(input_shape=input_shape.shape[1:]))
model.add(layers.Dense(100, activation=keras.layers.LeakyReLU(alpha=0.3)))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(50, activation=keras.layers.LeakyReLU(alpha=0.3)))
model.add(layers.Dropout(0.3))
model.add(layers.Dense(num_classes, activation='softmax'))
我正在使用load_模型函数进行评估,到目前为止我还没有遇到任何问题,但我现在得到以下错误:
ValueError: Unknown activation function: LeakyReLU
我是否应该对体系结构进行任何语法更改,或者这里是否存在更深层次的问题?如果您有任何建议,我将不胜感激,因为我已经尝试设置一些自定义对象,如下所述:
编辑:
我在调用load_model的文件中的导入如下所示:
import config
import numpy as np
from tensorflow.keras.preprocessing.image import img_to_array, load_img
from models.create_image_model import make_vgg
import argparse
from tensorflow.keras.models import load_model
import time
from tensorflow import keras
from tensorflow.keras import layers
在保存和加载具有此类“非标准”激活的模型时,似乎存在一些问题,如中所示;最安全的方法似乎是将LeakyReLU作为一个层重新编写模型,而不是作为一个激活:
model = Sequential()
model.add(layers.Flatten(input_shape=input_shape.shape[1:]))
model.add(layers.Dense(100)) # no activation here
model.add(layers.LeakyReLU(alpha=0.3)) # activation layer here instead
model.add(layers.Dropout(0.5))
model.add(layers.Dense(50)) # no activation here
model.add(layers.LeakyReLU(alpha=0.3)) # activation layer here instead
model.add(layers.Dropout(0.3))
model.add(layers.Dense(num_classes, activation='softmax'))
这完全等同于您自己的模型,并且更符合Keras的设计选择——无论好坏,Keras都将LeakyReLU作为一个层,而不是作为一个标准的激活函数。在保存和加载带有此类“非标准”激活的模型时,似乎存在一些问题,如中所暗示的;最安全的方法似乎是将LeakyReLU作为一个层重新编写模型,而不是作为一个激活:
model = Sequential()
model.add(layers.Flatten(input_shape=input_shape.shape[1:]))
model.add(layers.Dense(100)) # no activation here
model.add(layers.LeakyReLU(alpha=0.3)) # activation layer here instead
model.add(layers.Dropout(0.5))
model.add(layers.Dense(50)) # no activation here
model.add(layers.LeakyReLU(alpha=0.3)) # activation layer here instead
model.add(layers.Dropout(0.3))
model.add(layers.Dense(num_classes, activation='softmax'))
这完全等同于您自己的模型,更符合Keras的设计选择-无论好坏,它都包括LeakyReLU作为一个层,而不是作为标准的激活函数。您应该将所有相关导入添加到您的问题。@desertnaut我尝试在没有
keras.layers
和keras.layers
的情况下添加,结果相同根据我的说法,您已经导入了所有模块。但是你能试着从keras.layers导入LeakyReLU并通过model.add(layers.Dense(100,activation=LeakyReLU(alpha=0.3)))为添加模型更新code
)
为所有模型进行类似的更新。@JayPatel嗨,我会尝试一下,然后回复你。谢谢为了获得更多信息,我在一个单独的文件中构建了我的模型,而不是调用load_model。@desertnaut我将两个文件的导入语句都放在编辑中;我将用于创建模型的导入语句放在相关代码块中。您应该将所有相关导入添加到您的问题中。@desertnaut我尝试在不使用keras.layers
和使用keras.layers
的情况下添加,结果相同根据我的说法,您已经导入了所有模块。但是你能试着从keras.layers导入LeakyReLU并通过model.add(layers.Dense(100,activation=LeakyReLU(alpha=0.3)))为添加模型更新code
)
为所有模型进行类似的更新。@JayPatel嗨,我会尝试一下,然后回复你。谢谢为了获得更多信息,我在一个单独的文件中构建了我的模型,而不是调用load_model。@desertnaut我将两个文件的导入语句都放在编辑中;我将用于创建模型的导入语句放在相关的代码块中。