未为可变自动编码器模型定义keras.backend

未为可变自动编码器模型定义keras.backend,keras,keras-layer,autoencoder,Keras,Keras Layer,Autoencoder,我创建了一个可变自动编码器模型。为了进行采样,我创建了以下方法: from keras import backend as k def sampling(args): z_mean , z_log_var=args batch=k.shape(z_mean)[0] dim=k.int_shape(z_mean)[1] epsilon=k.random_normal(shape=(batch,dim)) return z_mean + k.exp(0.5

我创建了一个可变自动编码器模型。为了进行采样,我创建了以下方法:

from keras import backend as k
def sampling(args):
    z_mean , z_log_var=args
    batch=k.shape(z_mean)[0]
    dim=k.int_shape(z_mean)[1]

    epsilon=k.random_normal(shape=(batch,dim))
    return z_mean + k.exp(0.5 * z_log_var) * epsilon
这是模型架构:

def create_variationalModel(original_dim):
    input_shape=(original_dim,)
    intermidiate_dim=58
    batch_size=10
    latent_dim=3
    epochs=100

    inputs=Input(shape=input_shape,name="encoder_input")
    x= Dense(units=original_dim,activation="tanh")(inputs) 
    x= Dense(units=int(original_dim/2),activation="tanh")(x) 
    x1= Dense(units=int(original_dim/4),activation="tanh")(x) 
    x2= Dense(units=int(original_dim/8),activation="tanh")(x1) 
    x3= Dense(units=10,activation="tanh")(x2) 
    z_mean=Dense(latent_dim,name="z_mean")(x3)
    z_log_var=Dense(latent_dim,name="z_log_var")(x3)

    z=Lambda(sampling,output_shape=(latent_dim,),name="z")([z_mean,z_log_var])


    encoder=Model(inputs,[z_mean,z_log_var,z],name="encoder")
    encoder.summary()

    latent_inputs=Input(shape=(latent_dim,),name="z_sampling")
    x= Dense(units=10,activation="tanh")(latent_inputs) 
    x1=Dense(units=int(original_dim/8),activation="tanh")(x)
    x2=Dense(units=int(original_dim/4),activation="tanh")(x1)
    x3=Dense(units=int(original_dim/2),activation="tanh")(x2)
    x3=Dense(units=original_dim,activation="tanh")(x3)
    outputs=Dense(units=original_dim,activation="sigmoid")(x3)

    decoder=Model(latent_inputs,outputs,name="decoder")
    decoder.summary()


    outputs=decoder(encoder(inputs)[2])
    vae = Model(inputs,outputs,name="vae_mlp")


    reconstruction_loss=mse(inputs,outputs)
    reconstruction_loss*=original_dim


    kl_loss = 1 + z_log_var -k.square(z_mean) - k.exp(z_log_var)
    kl_loss=k.sum(kl_loss,axis=-1)
    kl_loss*=-0.5
    vae_loss=k.mean(reconstruction_loss+kl_loss)
    vae.add_loss(vae_loss)
    plot_model(vae,to_file='vae.png',show_shapes=True)
    vae.compile(optimizer=RMSprop(),loss="mean_squared_error",metrics=["mae"])
    return vae
在对模型进行培训和测试后,我决定将其保存如下:

vae.save("./models/vae.h5")
model = load_model("./models/vae.h5")
但当我尝试像这样加载模型时:

vae.save("./models/vae.h5")
model = load_model("./models/vae.h5")
我有一个问题:

---------------------------------------------------------------------------NameError回溯(最近的调用) 最后)在 1#负荷模型 ---->2型号=负荷\型号(“./型号/阀门h5”) 3.总结模型。 4.范本摘要() 5带有开放式(“./型号/标签编号_dic.pickle”,“rb”)作为f:

~/anaconda3/envs/myenv/lib/python3.8/site-packages/keras/engine/saving.py 装入包装中(*args,**kwargs) 490操作系统删除(tmp_文件路径) 491返回res -->492返回加载函数(*args,**kwargs) 493 494返回装载包装器

~/anaconda3/envs/myenv/lib/python3.8/site-packages/keras/engine/saving.py 在load_模型中(文件路径、自定义_对象、编译) 582如果H5Dict.是受支持的类型(文件路径): 583,H5Dict(文件路径,模式为r')为H5Dict: -->584模型=_反序列化_模型(h5dict,自定义_对象,编译) 585 elif hasattr(文件路径,“write”)和callable(文件路径.write): 586 def load_功能(H5文件):

~/anaconda3/envs/myenv/lib/python3.8/site-packages/keras/engine/saving.py in_反序列化_模型(h5dict、自定义_对象、编译) 272 raise VALUERROR('配置中未找到模型') 273 model_config=json.load(model_config.decode('utf-8')) -->274模型=来自配置的模型(模型配置,自定义对象=自定义对象) 275模型权重组=h5dict[“模型权重”] 276

~/anaconda3/envs/myenv/lib/python3.8/site-packages/keras/engine/saving.py 在模型\u中,从\u配置(配置,自定义\u对象) 625'
Sequential.from_config(config)
?')) 626从..层导入反序列化 -->627返回反序列化(配置,自定义\u对象=自定义\u对象) 628 629

~/anaconda3/envs/myenv/lib/python3.8/site packages/keras/layers/init.py 在反序列化中(配置、自定义对象) 163全局['Model']=模型。模型 164全局['Sequential']=模型。Sequential -->165返回反序列化对象(配置, 166模块_对象=全局, 167自定义对象=自定义对象

~/anaconda3/envs/myenv/lib/python3.8/site-packages/keras/utils/generic_utils.py 在反序列化对象(标识符、模块对象、, 自定义\u对象、可打印\u模块\u名称) 142自定义_对象=自定义_对象或{} 143如果有参数(从配置“自定义对象”中选择): -->144从配置返回cls( 145配置['config'], 146 custom\u objects=dict(列表(\u GLOBAL\u custom\u objects.items())+

~/anaconda3/envs/myenv/lib/python3.8/site-packages/keras/engine/network.py 在from_config(cls,config,custom_objects)1054#First中, 我们创建所有要处理的层和排队节点1055
对于配置['layers']中的层_数据: ->1056处理_层(层_数据)1057 1058#然后我们按照层深度的顺序处理节点

~/anaconda3/envs/myenv/lib/python3.8/site-packages/keras/engine/network.py 进程中的图层(图层数据)1039从..图层导入 反序列化为反序列化\u层1040 ->1041层=反序列化层(层数据,1042个自定义对象=自定义对象)1043
创建的\u层[层\u名称]=层

~/anaconda3/envs/myenv/lib/python3.8/site packages/keras/layers/init.py 在反序列化中(配置、自定义对象) 163全局['Model']=模型。模型 164全局['Sequential']=模型。Sequential -->165返回反序列化对象(配置, 166模块_对象=全局, 167自定义对象=自定义对象

~/anaconda3/envs/myenv/lib/python3.8/site-packages/keras/utils/generic_utils.py 在反序列化对象(标识符、模块对象、, 自定义\u对象、可打印\u模块\u名称) 142自定义_对象=自定义_对象或{} 143如果有参数(从配置“自定义对象”中选择): -->144从配置返回cls( 145配置['config'], 146 custom\u objects=dict(列表(\u GLOBAL\u custom\u objects.items())+

~/anaconda3/envs/myenv/lib/python3.8/site-packages/keras/engine/network.py 在from_配置(cls、配置、自定义_对象)1073中
节点数据=节点数据列表[节点索引]1074
尝试: ->1075处理_节点(层,节点_数据)1076 1077#如果节点没有所有 入站层

~/anaconda3/envs/myenv/lib/python3.8/site-packages/keras/engine/network.py 过程中节点(层、节点数据)1023和建筑 层(如果需要)。1024 if input_张量: ->1025层(解包单态(输入张量),**kwargs)1026 1027 def处理层(层数据):

~/anaconda3/envs/myenv/lib/python3.8/site-packages/keras/backend/tensorflow_backend.py 在符号包装中(*args,**kwargs) 73如果符号范围值: 74带有get_graph()。作为_default(): --->75返回函数(*args,**kwargs) 76.其他: 77返回函数