变分自编码器(keras)中的新错误

约翰尼普

我曾经使用此代码来训练变分自编码器(我在论坛上找到了该代码并根据我的需要对其进行了调整):

import pickle
from pylab import mpl,plt

#lecture des résultats

filename=r'XXX.pic'

data_file=open(filename,'rb')
X_sec = pickle.load(data_file)#[:,3000:]
data_file.close()

size=X_sec.shape[0]
prop=0.75

cut=int(size*prop)

X_train=X_sec[:cut]
X_test=X_sec[cut:]

std=X_train.std()

X_train /= std
X_test /= std

import keras
from keras import layers
from keras import backend as K
from keras.models import Model
import numpy as np

#encoding_dim = 12

sig_shape = (3600,)
batch_size = 128
latent_dim = 12
input_sig = keras.Input(shape=sig_shape)

x = layers.Dense(128, activation='relu')(input_sig)
x = layers.Dense(64, activation='relu')(x)
shape_before_flattening = K.int_shape(x)

x = layers.Dense(32, activation='relu')(x)

z_mean = layers.Dense(latent_dim)(x)
z_log_var = layers.Dense(latent_dim)(x)

encoder=Model(input_sig,[z_mean,z_log_var])



def sampling(args):
    z_mean, z_log_var = args
    epsilon = K.random_normal(shape=(K.shape(z_mean)[0], latent_dim),
    mean=0., stddev=1.)
    return z_mean + K.exp(z_log_var) * epsilon

z = layers.Lambda(sampling)([z_mean, z_log_var])

decoder_input = layers.Input(K.int_shape(z)[1:])
x = layers.Dense(np.prod(shape_before_flattening[1:]),activation='relu')(decoder_input)
x = layers.Reshape(shape_before_flattening[1:])(x)
x = layers.Dense(128, activation='relu')(x)
x = layers.Dense(3600, activation='linear')(x)

decoder = Model(decoder_input, x)
z_decoded = decoder(z)

class CustomVariationalLayer(keras.layers.Layer):
    def vae_loss(self, x, z_decoded):
        x = K.flatten(x)
        z_decoded = K.flatten(z_decoded)
        xent_loss = keras.metrics.mae(x, z_decoded)
        kl_loss = -5e-4 * K.mean(
        1 + z_log_var - K.square(z_mean) - K.exp(z_log_var), axis=-1)
        return K.mean(xent_loss + kl_loss)
    def call(self, inputs):
        x = inputs[0]
        z_decoded = inputs[1]
        loss = self.vae_loss(x, z_decoded)
        self.add_loss(loss, inputs=inputs)
        return x

y = CustomVariationalLayer()([input_sig, z_decoded])

vae = Model(input_sig, y)
vae.compile(optimizer='rmsprop', loss=None)
vae.summary()
vae.fit(x=X_train, y=None,shuffle=True,epochs=100,batch_size=batch_size,validation_data=(X_test, None))

它曾经运行顺利,但我已经更新了我的库,现在我收到了这个错误:

文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\framework\ops.py”,第 1619 行,在 _create_c_op c_op = c_api.TF_FinishOperation(op_desc )

InvalidArgumentError:图中节点名称重复:“lambda_1/random_normal/shape”

在处理上述异常的过程中,又发生了一个异常:

回溯(最近一次调用最后一次):

文件“I:\Documents\Nico\Python\finance\travail_amont\autoencoder_variationnel_bruit.py”,第 74 行,在 z = layers.Lambda(sampling)([z_mean, z_log_var])

文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\keras\backend\tensorflow_backend.py”,第75行,symbolic_fn_wrapper return func(*args, **kwargs )

文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\keras\engine\base_layer.py”,第 506 行,调用output_shape = self.compute_output_shape(input_shape)

文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\keras\layers\core.py”,第674行,在compute_output_shape x = self.call(xs)

文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\keras\layers\core.py”,第 716 行,调用 return self.function(inputs, **论据)

文件“I:\Documents\Nico\Python\finance\travail_amont\autoencoder_variationnel_bruit.py”,第 71 行,采样均值=0,stddev=1。)

文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\keras\backend\tensorflow_backend.py”,第 4329 行,在 random_normal 形状中,mean=mean,stddev=stddev , dtype=dtype, 种子=种子)

文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\keras\backend.py”,第5602行,random_normal 形状,mean=mean,stddev =stddev,dtype=dtype,种子=种子)

文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\ops\random_ops.py”,第 69 行,在 random_normal shape_tensor = tensor_util.shape_tensor(shape )

文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\framework\tensor_util.py”,第 994 行,shape_tensor 返回 ops.convert_to_tensor(shape, dtype=dtype,名称=“形状”)

文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\framework\ops.py”,第 1314 行,在 convert_to_tensor ret = conversion_func(value, dtype =dtype,名称=名称,as_ref=as_ref)

文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\ops\array_ops.py”,第 1368 行,在 _autopacking_conversion_function return _autopacking_helper(v, dtype,名称或“打包”)

文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\ops\array_ops.py”,第 1304 行,在 _autopacking_helper 中返回 gen_array_ops.pack(elems_as_tensors,名称=范围)

文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\ops\gen_array_ops.py”,第 5704 行,在包“Pack”中,值=值,轴=轴,名称=名称)

文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\framework\op_def_library.py”,第742行,_apply_op_helper attrs=attr_protos, op_def=op_def )

文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\framework\func_graph.py”,第 595 行,在 _create_op_internal compute_device 中)

文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\framework\ops.py”,第 3322 行,在 _create_op_internal op_def=op_def 中)

文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\framework\ops.py”,第 1786 行,在init control_input_ops 中)

文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\framework\ops.py”,第 1622 行,在 _create_c_op 中引发 ValueError(str(e) )

ValueError:图中的重复节点名称:'lambda_1/random_normal/shape'

我不知道这个错误:“图中节点名称重复”。有没有人有线索?谢谢。

因纳特

如果您正在使用tf 2.x,则按keras如下方式导入您的模块。

from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.kerasimport backend as K
from tensorflow.keras.models import Model

更多相关内容,#36509#130

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

keras中的一维卷积变分自编码器

ELBO是否在变分自动编码器中包含重建损失信息

用于鸡尾酒配方生成的条件变分自动编码器

keras变分自动编码器损失函数

渴望执行功能的输入不能是带有变分自动编码器的Keras符号张量

在变分自动编码器中从解码器输入到编码器输出的反向传播

尽管模型摘要清晰,但Keras变分自动编码器仍无法工作?

响亮的深层变分自编码器

解释变分自编码器高斯参数化

自编码器:准确性和图像数量

自编码器 Conv1D 形状错误

自编码器解码输出

Pytorch for Dummies 中的卷积自编码器

使用二元交叉熵时输入和输出形状不匹配 | Keras tf 自编码器

具有多个输入和输出的变分自动编码器

测试保存的卷积自编码器

Tensorflow 示例中的损失函数变分自动编码器

变分自编码器无法使用小的输入值进行训练

如何尽可能减少自编码器中的bootleneck?

卷积自编码器

自编码器通过自编码器加密任何类型的数据和降维方法

在 Keras 中训练变分自动编码器引发“SymbolicException:急切执行函数的输入不能是 Keras 符号张量”

如何使用变分自编码器作为特征提取器?

深度自动编码器-解码器结构中的 Keras NoneTypeError / 形状错误

使用 Pytorch 的线性自编码器

为什么一些隐藏单元在 GRU 自编码器中返回零?

为什么我的变分自动编码器只产生正值?

使用 tf.GradientTape 的变分自动编码器

如何在 CNN 自编码器中增加 Lambda 层的数量?