Transformer4keras
Transformer4keras copied to clipboard
训练输入维度问题(inputs)
您好,我想使用该项目训练自己的数据集,但是我的数据处理后shape为(n,50,30)的数据,而该项目inputs shape好像只能是(n,m)的维度,我将自己的数据reshape成(n,m)的shape后,loss不降低,测试结果都是0,请问怎么修改能满足我的数据呢?
inputs = Input(shape=(maxlen,), name="inputs")
您好,输入默认是3d张量,一般情况下对于文本来说就是(batch_size,句子长度,字向量编码维度)
inputs = Input(shape=(maxlen,), name="inputs")
这里的shape指的是(句子长度,编码维度),keras会自动将batch_size作为第一个维度添加,直接使用即可
我有一样的问题,在您的网络把embegging和encoding做add的时候,会发现encoding总是比embegging层多1个维度,比如我input层是(5,7)那么embegging层是(5,7),encoding层就是(5,7,7),这样会一直报错,无论网络其他参数如何设置。
`ValueError Traceback (most recent call last) ~\AppData\Local\Temp\ipykernel_11232\2887985132.py in <cell line: 1>() ----> 1 model,predicty,testy,r,p=Auto_Transformer(vwave,vx,5,[['input'],['transformer'],['fc',1],['activation','sigmoid']],test_size=0.25,task_mode='binary_classify',if_best_mode='no',modelpath=None,e_d_layernum=2,heads_num=2,kernel_size=64,drop_rate=0.0,kernel_initializer='he_normal',if_weight_initialize='no',weight_initialize_method='TruncatedNormal',weight_initialize_parameter1=0.00,weight_initialize_parameter2=0.05,if_print_model='yes',loss_function='default',optimizer='SGD',metrics='default',learning_rate=0.001,epochs=500,batch_size=20,ifrandom_split='yes',ifmute='no',ifsave='yes',savepath=r'H:\heatwave_model_accuracy_Transformer_5day',device='gpu')
~\AppData\Local\Temp\ipykernel_11232\1532197090.py in Auto_Transformer(vy, vx, timestep, model_list, test_size, task_mode, if_best_mode, modelpath, e_d_layernum, heads_num, kernel_size, drop_rate, kernel_initializer, if_weight_initialize, weight_initialize_method, weight_initialize_parameter1, weight_initialize_parameter2, if_print_model, loss_function, optimizer, metrics, learning_rate, epochs, batch_size, ifrandom_split, ifmute, ifsave, savepath, device) 247 model.add(input_layer) 248 elif model_list[i][0] == 'transformer': --> 249 model.add(Transformer(num_layers=e_d_layernum,vocab_size=timestep,heads=heads_num,model_dim=trainx.shape[2],drop_rate=drop_rate,units_dim=kernel_size,epsilon=0.001)) 250 elif model_list[i][0] == 'batchnormalization': 251 model.add(BatchNormalization(axis=-1))
D:\anaconda\lib\site-packages\tensorflow\python\training\tracking\base.py in _method_wrapper(self, *args, **kwargs) 627 self._self_setattr_tracking = False # pylint: disable=protected-access 628 try: --> 629 result = method(self, *args, **kwargs) 630 finally: 631 self._self_setattr_tracking = previous_value # pylint: disable=protected-access
D:\anaconda\lib\site-packages\keras\utils\traceback_utils.py in error_handler(*args, **kwargs) 65 except Exception as e: # pylint: disable=broad-except 66 filtered_tb = _process_traceback_frames(e.traceback) ---> 67 raise e.with_traceback(filtered_tb) from None 68 finally: 69 del filtered_tb
D:\anaconda\lib\site-packages\tensorflow\python\autograph\impl\api.py in wrapper(*args, **kwargs) 690 except Exception as e: # pylint:disable=broad-except 691 if hasattr(e, 'ag_error_metadata'): --> 692 raise e.ag_error_metadata.to_exception(e) 693 else: 694 raise
ValueError: Exception encountered when calling layer "transformer_24" (type Transformer).
in user code:
File "C:\Users\TBYC\Transformer.py", line 338, in call *
encoder_outputs = self.encoder(inputs)
File "D:\anaconda\lib\site-packages\keras\utils\traceback_utils.py", line 67, in error_handler **
raise e.with_traceback(filtered_tb) from None
ValueError: Exception encountered when calling layer "encoder_24" (type Encoder).
in user code:
File "C:\Users\TBYC\Transformer.py", line 287, in call *
encodings = Add()([embeddings,encodings])
File "D:\anaconda\lib\site-packages\keras\utils\traceback_utils.py", line 67, in error_handler **
raise e.with_traceback(filtered_tb) from None
ValueError: Exception encountered when calling layer "add" (type Add).
in user code:
File "C:\Users\TBYC\Transformer.py", line 86, in call *
res = input_a+input_b
ValueError: Dimensions must be equal, but are 7 and 5 for '{{node transformer_24/encoder_24/add/add}} = AddV2[T=DT_FLOAT](transformer_24/encoder_24/embedding_50/mul, transformer_24/encoder_24/positional_encoding_50/Cast)' with input shapes: [?,5,7,7], [5,7].
Call arguments received:
• inputs=['tf.Tensor(shape=(None, 5, 7, 7), dtype=float32)', 'tf.Tensor(shape=(5, 7), dtype=float32)']
Call arguments received:
• inputs=tf.Tensor(shape=(None, 5, 7), dtype=float32)
• training=True
Call arguments received: • inputs=tf.Tensor(shape=(None, 5, 7), dtype=float32)`