矩阵大小不兼容:In[0]:[10,3500],In[1]:[9,9] [Op:MatMul]自动编码器

问题描述

我正在研究神经网络,我是这个领域的新手。我正在为文本数据实现自动编码器。当我执行变分自动编码器的拟合函数时,问题就开始了。代码片段是

text_input_shape                 = (encoder(tweets_dna).shape[1],)
text_input_diensions             = len(encoder.get_vocabulary())
text_embedding_output_dimensions = 64

text_input_shape

encoder_input = tf.keras.layers.Input(shape=text_input_shape,dtype='float32',name="TF_input")
encoder_embedded = tf.keras.layers.Embedding(input_dim=text_input_diensions,output_dim=text_embedding_output_dimensions,mask_zero=True,name="Encoder_Embedding")(encoder_input)
LTSM_layer,state_h,state_c = tf.keras.layers.LSTM(text_embedding_output_dimensions,return_state=True,name="LTSM")(encoder_embedded)
dense_layer = tf.keras.layers.Dense(text_embedding_output_dimensions,activation='relu',name="Compression")(LTSM_layer)
final_layer = tf.keras.layers.Dense(text_input_diensions,name="Lossy_Compression")(dense_layer)
text_mu = tf.keras.layers.Dense(text_input_diensions,name='latent_mu')(final_layer)
text_sigma = tf.keras.layers.Dense(text_input_diensions,name='latent_sigma')(final_layer)

text_encoder_states = [state_h,state_c]

def sample_z(args):
    mu,sigma = args
    batch     = tf.keras.backend.shape(mu)[0]
    dim       = tf.keras.backend.int_shape(mu)[1]
    eps       = tf.keras.backend.random_normal(shape=(batch,dim))
    return text_mu + tf.keras.backend.exp(sigma / 2) * eps

text_z = tf.keras.layers.Lambda(sample_z,output_shape=(len(encoder.get_vocabulary()),),name='z')([text_mu,text_sigma])

text_encoder = tf.keras.Model(encoder_input,[text_mu,text_sigma,text_z],name='TextCompressionModel')

# Decoder
decoder_input = tf.keras.layers.Input(shape=(text_input_diensions,name='decoder_input')
decoder_embedded = tf.keras.layers.Embedding(input_dim=text_input_diensions,output_dim=64,mask_zero=True)(decoder_input)
LTSM_layer = tf.keras.layers.LSTM(64,dtype='float32')(decoder_embedded)
final_output_dense = tf.keras.layers.Dense(MAX_SEQUENCE_LENGHT,dtype='float32')(LTSM_layer)

text_decoder = tf.keras.Model(decoder_input,final_output_dense,name='TextDecoder')

# Instantiate VAE
tweet_vae_outputs = text_decoder(text_encoder(encoder_input)[2])
tweets_vae = tf.keras.Model(encoder_input,tweet_vae_outputs,name='Text-VAE')

def tweets_kl_reconstruction_loss(true,pred):
    # Reconstruction loss
    reconstruction_loss = binary_crossentropy(K.flatten(true),K.flatten(pred)) * input_shape[0]
    # KL divergence loss
    kl_loss = -0.5 * (1 + sigma - K.square(mu) - K.exp(sigma))
    kl_loss = tf.reduce_mean(tf.reduce_sum(kl_loss,axis=1))
    # Total loss = 50% rec + 50% KL divergence loss
    return (reconstruction_loss + kl_loss)

tweets_reconstruction_loss = tf.function(tweets_kl_reconstruction_loss)

tweets_vae.compile(optimizer='adam',loss=tweets_reconstruction_loss)

history = vae.fit(x = tweet_data,y = tweet_data,epochs = no_epochs,batch_size = batch_size,validation_split = validation_split)

错误是:

纪元 1/10 -------------------------------------------------- ------------------------- InvalidArgumentError Traceback(最近一次调用 最后)在 ----> 1 历史 = vae.fit(x = tweet_data,2 epochs = no_epochs, 3 批量大小 = 批量大小, 4 validation_split = validation_split)

c:\users\bilal\appdata\local\programs\python\python38\lib\site-packages\tensorflow\python\keras\engine\training.py 在 _method_wrapper(self,*args,**kwargs) 106 def _method_wrapper(self,**kwargs): 107 如果不是 self._in_multi_worker_mode(): #pylint: disable=protected-access --> 108 返回方法(self,**kwargs) 109 110 # 已经在 run_distribute_coordinator 内运行。

c:\users\bilal\appdata\local\programs\python\python38\lib\site-packages\tensorflow\python\keras\engine\training.py 在适合(自我,x,y,batch_size,纪元,详细,回调, 验证拆分、验证数据、随机播放、类权重、 sample_weight、initial_epoch、steps_per_epoch、validation_steps、 validation_batch_size、validation_freq、max_queue_size、workers、 use_multiprocessing) 1096 batch_size=batch_size):
1097 callbacks.on_train_batch_begin(步骤) -> 1098 tmp_logs = train_function(iterator) 1099 if data_handler.should_sync: 1100
context.async_wait()

c:\users\bilal\appdata\local\programs\python\python38\lib\site-packages\tensorflow\python\keras\engine\training.py 在 train_function(迭代器)中 804 def train_function(迭代器): 805 """一步执行训练。""" --> 806 返回 step_function(self,iterator) 807 808 其他:

c:\users\bilal\appdata\local\programs\python\python38\lib\site-packages\tensorflow\python\keras\engine\training.py 在 step_function(模型,迭代器)中 794 795 数据 = 下一个(迭代器) --> 796 个输出 = model.distribute_strategy.run(run_step,args=(data,)) 797 个输出 = reduce_per_replica( 798 个输出,self.distribute_strategy,reduction='first')

c:\users\bilal\appdata\local\programs\python\python38\lib\site-packages\tensorflow\python\distribute\distribute_lib.py 在运行中(解析参数失败)1209 fn = autograph.tf_convert(1210 fn, autograph_ctx.control_status_ctx(),convert_by_default=False) -> 1211 返回 self._extended.call_for_each_replica(fn,args=args,kwargs=kwargs) 1212 1213 # Todo(b/151224785): 删除已弃用的别名。

c:\users\bilal\appdata\local\programs\python\python38\lib\site-packages\tensorflow\python\distribute\distribute_lib.py 在 call_for_each_replica(self,fn,args,kwargs) 2583 kwargs = {} 2584 与 self._container_strategy().scope(): -> 2585 返回 self._call_for_each_replica(fn,kwargs) 2586 2587 def _call_for_each_replica(self,kwargs):

c:\users\bilal\appdata\local\programs\python\python38\lib\site-packages\tensorflow\python\distribute\distribute_lib.py 在 _call_for_each_replica(self,kwargs) 2943
self._container_strategy(),2944
replica_id_in_sync_group=constant_op.constant(0,dtypes.int32)): -> 2945 返回 fn(*args,**kwargs) 2946 2947 def _reduce_to(self、reduce_op、value、destination、experimental_hints):

c:\users\bilal\appdata\local\programs\python\python38\lib\site-packages\tensorflow\python\autograph\impl\api.py 在包装器中(*args,**kwargs) 273 定义包装器(*args,**kwargs): 274 与 ag_ctx.ControlStatusCtx(status=ag_ctx.Status.UNSPECIFIED): --> 275 返回函数(*args,**kwargs) 276 第277话

c:\users\bilal\appdata\local\programs\python\python38\lib\site-packages\tensorflow\python\keras\engine\training.py 在运行步骤(数据) 787 788 def run_step(数据): --> 789 个输出 = model.train_step(data) 790 # 确保计数器仅在 train_step 成功时更新。 第 791 章

c:\users\bilal\appdata\local\programs\python\python38\lib\site-packages\tensorflow\python\keras\engine\training.py 在 train_step(self,data) 745 746 使用 backprop.GradientTape() 作为磁带: --> 747 y_pred = self(x,training=True) 748 损失 = self.compiled_loss( 第 749 章

c:\users\bilal\appdata\local\programs\python\python38\lib\site-packages\tensorflow\python\keras\engine\base_layer.py 在 调用(self,**kwargs) 983 984 与 ops.enable_auto_cast_variables(self._compute_dtype_object): --> 985 个输出 = call_fn(inputs,**kwargs) 986 第 987 章

c:\users\bilal\appdata\local\programs\python\python38\lib\site-packages\tensorflow\python\keras\engine\functional.py 在通话中(自我,输入,培训,面具) 383 一个张量列表,如果有多个输出。 第384章 --> 385 返回 self._run_internal_graph( 386 个输入,训练=训练,掩码=掩码) 387

c:\users\bilal\appdata\local\programs\python\python38\lib\site-packages\tensorflow\python\keras\engine\functional.py 在_run_internal_graph(自我,输入,训练,掩码) 506 第507话 --> 508 个输出 = node.layer(*args,**kwargs) 509 510 # 更新tensor_dict。

c:\users\bilal\appdata\local\programs\python\python38\lib\site-packages\tensorflow\python\keras\engine\base_layer.py 在 调用(self,**kwargs) 986 第 987 章

c:\users\bilal\appdata\local\programs\python\python38\lib\site-packages\tensorflow\python\keras\layers\core.py 在调用(自我,输入)1191 1192 定义调用(自我,输入): -> 1193 返回 core_ops.dense(1194 个输入,1195 个 self.kernel,

c:\users\bilal\appdata\local\programs\python\python38\lib\site-packages\tensorflow\python\keras\layers\ops\core.py 在密集(输入,内核,偏差,激活,dtype) 51 个输出 = sparse_ops.sparse_tensor_dense_matmul(输入,内核) 52 其他: ---> 53 个输出 = gen_math_ops.mat_mul(输入,内核) 54 # 向输入广播内核。 55 其他:

c:\users\bilal\appdata\local\programs\python\python38\lib\site-packages\tensorflow\python\ops\gen_math_ops.py 在 mat_mul(a,b,transpose_a,transpose_b,name) 5622 中返回 _result 5623 除了 _core._NotOkStatusException 作为 e: -> 5624 _ops.raise_from_not_ok_status(e,name) 5625 除了 _core._FallbackException: 5626 pass

c:\users\bilal\appdata\local\programs\python\python38\lib\site-packages\tensorflow\python\framework\ops.py 在 raise_from_not_ok_status(e,name) 6841 message = e.message + (" name: " + name if name is not None else "") 6842 # pylint: 禁用=受保护的访问 -> 6843 Six.raise_from(core._status_to_exception(e.code,message),None) 6844 # pylint: enable=protected-access 6845

~\AppData\Roaming\Python\python38\site-packages\six.py 中 raise_from(value,from_value)

InvalidArgumentError: 矩阵大小不兼容: In[0]: [10,3500],在1中:[9,9] [Op:MatMul]

我是这个领域的新手。而且我不确定我的实现是否正确,因为我不知道 In1: [9,9] 来自哪里。此外,此 GitHub 链接指向完整代码executed notebook。请帮忙。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)