加载时lambda问题的Keras激活
我试图使用参数“axis”执行softmax,我找到的唯一方法是通过函数lambda。这是我的代码,包含softmax的lambda激活层:加载时lambda问题的Keras激活,keras,Keras,我试图使用参数“axis”执行softmax,我找到的唯一方法是通过函数lambda。这是我的代码,包含softmax的lambda激活层: from keras.models import Model from keras.layers import Input,Dense,Reshape,Activation from keras.layers.merge import Multiply,Concatenate from keras.layers.core import Lambda fro
from keras.models import Model
from keras.layers import Input,Dense,Reshape,Activation
from keras.layers.merge import Multiply,Concatenate
from keras.layers.core import Lambda
from keras.activations import softmax
from keras import backend as K
import numpy as np
N = 6
M = 6
T = 1000
H = 5
# Toy input creation
input = np.concatenate([np.random.normal(np.random.rand(1)[0],1.,(1,N,M)) for t in range(T)],axis=0)
input2 = np.random.rand(T,N,M)
input3 = np.random.rand(T,N,M)
input4 = np.random.rand(T,N,M)
a = np.mean(np.reshape(input,(T,N*M)),axis=1)
a = np.maximum(0.,np.minimum(a,0.9999))
a = np.floor(a*3).astype(int)
a = np.stack([a for i in range(M)],axis=1)
a = np.stack([a for i in range(N)],axis=2)
mix1 = np.concatenate((input2[:,:2,:],input3[:,2:4,:],input4[:,4:,:]),axis=1)
mix2 = np.concatenate((input3[:,:2,:],input4[:,2:4,:],input2[:,4:,:]),axis=1)
mix3 = np.concatenate((input4[:,:2,:],input2[:,2:4,:],input3[:,4:,:]),axis=1)
output = np.choose(a,[mix1,mix2,mix3])
images = np.stack((input2,input3,input4),axis=3)
# models definition
# one general model to be trained and
# one mask model to be used later for testing
input_layer = Input(shape=(N,M))
images_input = Input(shape=(N,M,3))
x = Reshape((N*M,))(input_layer)
x = Dense(H, kernel_initializer='uniform', activation='relu')(x)
x = Dense(N*N*3, kernel_initializer='uniform')(x)
x = Reshape((N,N,3))(x)
masks = Activation(activation=lambda y:softmax(y,axis=3))(x)
output_layer = Multiply()([masks,images_input])
output_layer = Lambda(lambda x:K.sum(x,axis=3))(output_layer)
model = Model(inputs=[input_layer,images_input],outputs=output_layer)
mask_model = Model(inputs=input_layer,outputs=masks)
# Compile model
model.compile(loss='mean_squared_error', optimizer='adam')
# Fit the model
history = model.fit([input,images], output, epochs=200, batch_size=50)
#save models
model.save('test.h5')
mask_model.save('mask_test.h5')
它在培训期间工作正常,但当我尝试加载文件时,失败:
from keras.models import load_model
mask_model = load_model('mask_test.h5')
我得到一个错误:
回溯(最近一次呼叫最后一次):
文件“/home/kresch/general2.py”,第3行,在
屏蔽模型=负载模型(“屏蔽测试.h5”)
文件“/opt/anaconda3/envs/tensorflow/lib/python3.5/site packages/keras/models.py”,第246行,加载模式
模型=来自配置的模型(模型配置,自定义对象=自定义对象)
文件“/opt/anaconda3/envs/tensorflow/lib/python3.5/site-packages/keras/models.py”,第314行,模型配置中的
返回层\模块。反序列化(配置,自定义\对象=自定义\对象)
文件“/opt/anaconda3/envs/tensorflow/lib/python3.5/site packages/keras/layers/_init__.py”,第54行,反序列化
可打印\u模块\u name='layer')
文件“/opt/anaconda3/envs/tensorflow/lib/python3.5/site packages/keras/utils/generic_utils.py”,第140行,反序列化_keras_对象
列表(自定义对象.项())
文件“/opt/anaconda3/envs/tensorflow/lib/python3.5/site packages/keras/engine/topology.py”,第2450行,在from_config中
处理层(层数据)
文件“/opt/anaconda3/envs/tensorflow/lib/python3.5/site packages/keras/engine/topology.py”,第2419行,进程层
自定义对象=自定义对象)
文件“/opt/anaconda3/envs/tensorflow/lib/python3.5/site packages/keras/layers/_init__.py”,第54行,反序列化
可打印\u模块\u name='layer')
文件“/opt/anaconda3/envs/tensorflow/lib/python3.5/site packages/keras/utils/generic_utils.py”,反序列化_keras_对象中的第142行
从_config(config['config'])返回cls
文件“/opt/anaconda3/envs/tensorflow/lib/python3.5/site packages/keras/engine/topology.py”,第1242行,在from_config中
返回cls(**配置)
文件“/opt/anaconda3/envs/tensorflow/lib/python3.5/site packages/keras/layers/core.py”,第287行,在__
self.activation=activations.get(激活)
文件“/opt/anaconda3/envs/tensorflow/lib/python3.5/site packages/keras/activations.py”,get中第81行
返回反序列化(标识符)
文件“/opt/anaconda3/envs/tensorflow/lib/python3.5/site packages/keras/activations.py”,第73行,反序列化
可打印的\u模块\u名称='激活功能')
文件“/opt/anaconda3/envs/tensorflow/lib/python3.5/site packages/keras/utils/generic_utils.py”,第160行,反序列化_keras_对象
“:”+函数(名称)
ValueError:未知的激活函数:
进程已完成,退出代码为1
同样的情况也发生在:
model = load_model('test.h5')
我是否使用了lambda函数错误?或者(更好)有没有办法避免使用lambda函数?尝试自定义激活层,然后加载模型
load_model('test.h5',custom_objects=activation_layer)
请为您编写的代码添加更多上下文(可能是完整代码)。此外,您还可以编辑您的问题并添加您提到的堆栈跟踪。