未为可变自动编码器模型定义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返回函数