Python 从.h5文件加载权重时Tensorflow 2.0值错误

Python 从.h5文件加载权重时Tensorflow 2.0值错误,python,keras,tensorflow2.0,Python,Keras,Tensorflow2.0,我有一个VAE架构脚本,如下所示: 将numpy导入为np 导入tensorflow作为tf 从tensorflow.keras.layers导入输入、Conv2D、展平、密集、Conv2D转置、Lambda、重塑、图层 从tensorflow.keras.models导入模型 从tensorflow.keras.optimizers导入Adam 从tensorflow.keras导入后端为K 输入尺寸=(64,64,3) CONV_过滤器=[32,64,64,128] CONV_内核大小=[4

我有一个VAE架构脚本,如下所示:

将numpy导入为np
导入tensorflow作为tf
从tensorflow.keras.layers导入输入、Conv2D、展平、密集、Conv2D转置、Lambda、重塑、图层
从tensorflow.keras.models导入模型
从tensorflow.keras.optimizers导入Adam
从tensorflow.keras导入后端为K
输入尺寸=(64,64,3)
CONV_过滤器=[32,64,64,128]
CONV_内核大小=[4,4,4,4]
CONV_步幅=[2,2,2,2]
CONV_激活=['relu'、'relu'、'relu'、'relu'、'relu']
密集型_尺寸=1024
CONV_T_FILTERS=[64,64,32,3]
CONV_T_内核大小=[5,5,6,6]
CONV_T_跨步=[2,2,2,2]
CONV_T_激活=['relu'、'relu'、'relu'、'sigmoid']
Z_DIM=32
批量大小=100
学习率=0.0001
KL_公差=0.5
类别抽样(层):
def呼叫(自我,输入):
mu,log_var=输入
ε=K.随机_正常(形状=K.形状(μ),平均值=0,标准差=1。)
返回mu+K.exp(log\u var/2)*epsilon
VAEModel类(型号):
定义初始值(自身、编码器、解码器、r_损耗系数,**kwargs):
超级(VAEModel,自我)。\uuuuu初始值(**kwargs)
self.encoder=编码器
self.decoder=解码器
self.r\u损失系数=r\u损失系数
def系列步骤(自身、数据):
如果isinstance(数据、元组):
数据=数据[0]
def compute_内核(x,y):
x_size=tf.shape(x)[0]
y_size=tf.shape(y)[0]
尺寸=tf.形状(x)[1]
平铺x=tf.tile(tf.reformate(x,tf.stack([x\u大小,1,dim])),tf.stack([1,y\u大小,1]))
平铺y=tf.tile(tf.reformate(y,tf.stack([1,y\u大小,dim])),tf.stack([x\u大小,1,1]))
返回tf.exp(-tf.reduce_-mean(tf.square(平铺x-平铺y),轴=2)/tf.cast(dim,tf.float32))
def计算mmd(x,y):
x_内核=计算内核(x,x)
y_内核=计算_内核(y,y)
xy_内核=计算_内核(x,y)
返回tf.reduce_-mean(x_内核)+tf.reduce_-mean(y_内核)-2*tf.reduce_-mean(xy_内核)
使用tf.GradientTape()作为磁带:
z_平均值,z_log_var,z=self.encoder(数据)
重构=自译码器(z)
重建损失=tf.reduce平均值(
tf.square(数据重建),轴=[1,2,3]
)
重建损失*=自恢复损失系数
kl_损失=1+z_log_var-tf.square(z_均值)-tf.exp(z_log_var)
kl_损失=tf。减少总和(kl_损失,轴=1)
吉隆坡损失*=-0.5
true_samples=tf.random.normal(tf.stack([BATCH_SIZE,Z_DIM]))
损失=计算(真实样本,z)
总损失=重建损失+损失mmd
梯度=磁带梯度(总损耗、自身可训练重量)
自我优化。应用梯度(zip(梯度,自我训练的权重))
返回{
“损失”:总损失,
“重建损失”:重建损失,
“kl_损失”:kl_损失,
“损失额”:损失额
}
def呼叫(自我,输入):
潜在=自编码器(输入)
返回自译码器(潜在)
类VAE():
定义初始化(自):
self.models=self.\u build()
self.full_model=self.models[0]
self.encoder=self.models[1]
self.decoder=self.models[2]
self.input_dim=输入_dim
self.z_dim=z_dim
自学习率=学习率
self.kl_公差=kl_公差
def_构建(自):
vae_x=输入(形状=输入尺寸,名称=观察输入)
vae_c1=Conv2D(过滤器=CONV_过滤器[0],内核大小=CONV_内核大小[0],步幅=CONV_步幅[0],激活=CONV_激活[0],名称=CONV_层1')(vae_x)
vae_c2=Conv2D(过滤器=CONV_过滤器[1],内核大小=CONV_内核大小[1],步幅=CONV_步幅[1],激活=CONV_激活[0],名称=CONV_层2')(vae_c1)
vae_c3=Conv2D(过滤器=CONV_过滤器[2],内核大小=CONV_内核大小[2],步幅=CONV_步幅[2],激活=CONV_激活[0],名称=CONV_层3')(vae_c2)
vae_c4=Conv2D(过滤器=CONV_过滤器[3],内核大小=CONV_内核大小[3],步幅=CONV_步幅[3],激活=CONV_激活[0],名称=CONV_层4')(vae_c3)
vae_z_in=展平()(vae_c4)
vae_z_mean=稠密(z_DIM,name='mu')(vae_z_in)
vae_z_log_var=Dense(z_DIM,name='log_var')(vae_z_in)
vae_z=采样(name='z')([vae_z_平均值,vae_z_对数变量])
####解码器:
vae_z_输入=输入(形状=(z_尺寸),名称=(z_输入)
vae_densite=densite(1024,name='densite_layer')(vae_z_输入)
vae_unflatten=重塑((1,1,密集型),name='unflatten')(vae_密集型)
vae_d1=Conv2DTranspose(filters=CONV_T_filters[0],kernel_size=CONV_T_kernel_size[0],strips=CONV_T_strips[0],activation=CONV_T_ACTIVATIONS[0],name=deconv_layer_1')(vae_unflatten)
vae_d2=Conv2DTranspose(filters=CONV_T_filters[1],kernel_size=CONV_T_kernel_size[1],strips=CONV_T_strips[1],activation=CONV_T_ACTIVATIONS[1],name=deconv_layer_2')(vae_d1)
vae_d3=Conv2DTranspose(filters=CONV_T_filters[2],kernel_size=CONV_T_kernel_size[2],strips=CONV_T_strips[2],activation=CONV_T_ACTIVATIONS[2],name=deconv_layer_3')(vae_d2)
vae_d4=Conv2DTranspose(filters=CONV_T_filters[3],kernel_size=CONV_T_kernel_size[3],strips=CONV_T_strips[3],activation=CONV_T_ACTIVATIONS[3],name=deconv_layer_4')(vae_d3)
####模型
vae_编码器=模型(vae_x,[vae_z_均值,vae_z_对数变量,vae_z],名称='encoder')
vae_解码器=型号(vae_z_输入,vae_d4,名称='解码器')
vae_full=VAEModel(vae_编码器,vae_解码器,10000)
opti=Adam(lr=学习率)
vae_full.compile(优化器=opti)
返回(vae_满、vae_编码器、vae_解码器)
def set_权重(自身、文件路径):
self.full\u model.load\u权重(文件路径)
def系列(自我,
model(np.zeros((1,w,h,c)))