[英]new bug in a variational autoencoder (keras)
I used to use this code to train variational autoencoder (I found the code on a forum and adapted it to my needs):我曾经使用此代码来训练变分自动编码器(我在论坛上找到了代码并对其进行了调整以适应我的需要):
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))
it used to work smoothly but I have updated my librairies and now I get this error:它曾经运行顺利,但我已经更新了我的库,现在我收到了这个错误:
File "C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\framework\ops.py", line 1619, in _create_c_op c_op = c_api.TF_FinishOperation(op_desc)
文件“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: Duplicate node name in graph: 'lambda_1/random_normal/shape'
InvalidArgumentError:图中重复的节点名称:'lambda_1/random_normal/shape'
During handling of the above exception, another exception occurred:
在处理上述异常的过程中,又出现了一个异常:
Traceback (most recent call last):
回溯(最近一次通话最后):
File "I:\Documents\Nico\Python\finance\travail_amont\autoencoder_variationnel_bruit.py", line 74, in z = layers.Lambda(sampling)([z_mean, z_log_var])
文件“I:\Documents\Nico\Python\finance\travail_amont\autoencoder_variationnel_bruit.py”,第 74 行,在 z = layers.Lambda(sampling)([z_mean, z_log_var])
File "C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\keras\backend\tensorflow_backend.py", line 75, in symbolic_fn_wrapper return func(*args, **kwargs)
文件“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 )
File "C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\keras\engine\base_layer.py", line 506, in call output_shape = self.compute_output_shape(input_shape)
文件“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)
File "C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\keras\layers\core.py", line 674, in compute_output_shape x = self.call(xs)
文件“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)
File "C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\keras\layers\core.py", line 716, in call return self.function(inputs, **arguments)
文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\keras\layers\core.py”,第 716 行,调用 return self.function(inputs, **论据)
File "I:\Documents\Nico\Python\finance\travail_amont\autoencoder_variationnel_bruit.py", line 71, in sampling mean=0., stddev=1.)
文件“I:\Documents\Nico\Python\finance\travail_amont\autoencoder_variationnel_bruit.py”,第 71 行,抽样平均值=0.,stddev=1。)
File "C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\keras\backend\tensorflow_backend.py", line 4329, in random_normal shape, mean=mean, stddev=stddev, dtype=dtype, seed=seed)
文件“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,种子=种子)
File "C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\keras\backend.py", line 5602, in random_normal shape, mean=mean, stddev=stddev, dtype=dtype, seed=seed)
文件“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,种子=种子)
File "C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\ops\random_ops.py", line 69, in 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\ops\random_ops.py”,第 69 行,在 random_normal shape_tensor = tensor_util.shape_tensor(shape )
File "C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\framework\tensor_util.py", line 994, in shape_tensor return ops.convert_to_tensor(shape, dtype=dtype, name="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,名称=“形状”)
File "C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\framework\ops.py", line 1314, in convert_to_tensor ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
文件“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)
File "C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\ops\array_ops.py", line 1368, in _autopacking_conversion_function return _autopacking_helper(v, dtype, name or "packed")
文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\ops\array_ops.py”,第 1368 行,在 _autopacking_conversion_function 返回 _autopacking_helper(v, dtype,名称或“包装”)
File "C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\ops\array_ops.py", line 1304, in _autopacking_helper return gen_array_ops.pack(elems_as_tensors, name=scope)
_autopacking_helper 中的文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\ops\array_ops.py”,第 1304 行,return gen_array_ops.pack(elems_as_tensors,名称=范围)
File "C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\ops\gen_array_ops.py", line 5704, in pack "Pack", values=values, axis=axis, name=name)
文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\ops\gen_array_ops.py”,第 5704 行,在包“Pack”中,values=values ,轴=轴,名称=名称)
File "C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\framework\op_def_library.py", line 742, in _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\op_def_library.py”,第 742 行,在 _apply_op_helper attrs=attr_protos, op_def=op_def )
File "C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\framework\func_graph.py", line 595, in _create_op_internal compute_device)
文件“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 中)
File "C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\framework\ops.py", line 3322, in _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”,第 3322 行,在 _create_op_internal op_def=op_def)
File "C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\framework\ops.py", line 1786, in init control_input_ops)
文件“C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\framework\ops.py”,第 1786 行,在init control_input_ops 中)
File "C:\Users\user\AppData\Local\conda\conda\envs\my_root\lib\site-packages\tensorflow_core\python\framework\ops.py", line 1622, in _create_c_op raise ValueError(str(e))
文件“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: Duplicate node name in graph: 'lambda_1/random_normal/shape'
ValueError:图中重复的节点名称:'lambda_1/random_normal/shape'
I do not know this error: "Duplicate node name in graph".我不知道这个错误:“图中的节点名称重复”。 Does anyone has a clue?
有人有线索吗? Thanks.
谢谢。
If you're using tf 2.x
, then import your keras
modules as follows.如果您使用的是
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.