1
1
import os
2
2
import argparse
3
3
4
- os . environ [ "CUDA_DEVICE_ORDER" ] = "PCI_BUS_ID"
4
+ from utils . functions import Storage
5
5
6
- __all__ = ['Config' ]
7
-
8
- class Storage (dict ):
9
- """
10
- A Storage object is like a dictionary except `obj.foo` can be used inadition to `obj['foo']`
11
- ref: https://blog.csdn.net/a200822146085/article/details/88430450
12
- """
13
- def __getattr__ (self , key ):
14
- try :
15
- return self [key ]
16
- except KeyError as k :
17
- raise AttributeError (k )
18
-
19
- def __setattr__ (self , key , value ):
20
- self [key ] = value
21
-
22
- def __delattr__ (self , key ):
23
- try :
24
- del self [key ]
25
- except KeyError as k :
26
- raise AttributeError (k )
27
-
28
- def __str__ (self ):
29
- return "<" + self .__class__ .__name__ + dict .__repr__ (self ) + ">"
30
-
31
- class Config ():
6
+ class ConfigRegression ():
32
7
def __init__ (self , args ):
33
- # parameters for data
34
- # global parameters for running
35
- self .globalArgs = args
36
8
# hyper parameters for models
37
- self . HYPER_MODEL_MAP = {
9
+ HYPER_MODEL_MAP = {
38
10
'self_mm' : self .__SELF_MM
39
11
}
40
12
# hyper parameters for datasets
41
- self .HYPER_DATASET_MAP = self .__datasetCommonParams ()
13
+ HYPER_DATASET_MAP = self .__datasetCommonParams ()
14
+
15
+ # normalize
16
+ model_name = str .lower (args .modelName )
17
+ dataset_name = str .lower (args .datasetName )
18
+ # load params
19
+ commonArgs = HYPER_MODEL_MAP [model_name ]()['commonParas' ]
20
+ dataArgs = HYPER_DATASET_MAP [dataset_name ]
21
+ dataArgs = dataArgs ['aligned' ] if (commonArgs ['need_data_aligned' ] and 'aligned' in dataArgs ) else dataArgs ['unaligned' ]
22
+ # integrate all parameters
23
+ self .args = Storage (dict (vars (args ),
24
+ ** dataArgs ,
25
+ ** commonArgs ,
26
+ ** HYPER_MODEL_MAP [model_name ]()['datasetParas' ][dataset_name ],
27
+ ))
42
28
43
29
def __datasetCommonParams (self ):
44
- assert self .globalArgs .datasetName in ['mosi' , 'mosei' , 'sims' ]
45
-
46
- tmp = "aligned" if self .globalArgs .aligned else "unaligned"
47
- if self .globalArgs .datasetName in ['mosi' , 'mosei' ]:
48
- text_len = 50
49
- elif self .globalArgs .datasetName in ['sims' ]:
50
- text_len = 39
51
-
52
- dataPath = os .path .join (self .globalArgs .data_dir , self .globalArgs .datasetName , \
53
- tmp + '_' + str (text_len ) + '.pkl' )
30
+ root_dataset_dir = '/home/sharing/disk3/dataset/multimodal-sentiment-dataset/StandardDatasets'
54
31
tmp = {
55
32
'mosi' :{
56
- 'dataPath' : dataPath ,
57
- 'input_lens' : (50 , 50 , 50 ) if self .globalArgs .aligned else (50 , 500 , 375 ),
58
- # (text, audio, video)
59
- 'feature_dims' : (768 , 5 , 20 ),
60
- 'train_samples' : 1284 ,
61
- 'language' : 'en' ,
62
- 'KeyEval' : 'Loss'
33
+ 'aligned' : {
34
+ 'dataPath' : os .path .join (root_dataset_dir , 'MOSI/Processed/aligned_50.pkl' ),
35
+ 'seq_lens' : (50 , 50 , 50 ),
36
+ # (text, audio, video)
37
+ 'feature_dims' : (768 , 5 , 20 ),
38
+ 'train_samples' : 1284 ,
39
+ 'num_classes' : 3 ,
40
+ 'language' : 'en' ,
41
+ 'KeyEval' : 'Loss'
42
+ },
43
+ 'unaligned' : {
44
+ 'dataPath' : os .path .join (root_dataset_dir , 'MOSI/Processed/unaligned_50.pkl' ),
45
+ 'seq_lens' : (50 , 50 , 50 ),
46
+ # (text, audio, video)
47
+ 'feature_dims' : (768 , 5 , 20 ),
48
+ 'train_samples' : 1284 ,
49
+ 'num_classes' : 3 ,
50
+ 'language' : 'en' ,
51
+ 'KeyEval' : 'Loss'
52
+ }
63
53
},
64
54
'mosei' :{
65
- 'dataPath' : dataPath ,
66
- 'input_lens' : (50 , 50 , 50 ) if self .globalArgs .aligned else (50 , 500 , 375 ),
67
- # (text, audio, video)
68
- 'feature_dims' : (768 , 74 , 35 ),
69
- 'train_samples' : 16326 ,
70
- 'language' : 'en' ,
71
- 'KeyEval' : 'Loss'
55
+ 'aligned' : {
56
+ 'dataPath' : os .path .join (root_dataset_dir , 'MOSEI/Processed/aligned_50.pkl' ),
57
+ 'seq_lens' : (50 , 50 , 50 ),
58
+ # (text, audio, video)
59
+ 'feature_dims' : (768 , 74 , 35 ),
60
+ 'train_samples' : 16326 ,
61
+ 'num_classes' : 3 ,
62
+ 'language' : 'en' ,
63
+ 'KeyEval' : 'Loss'
64
+ },
65
+ 'unaligned' : {
66
+ 'dataPath' : os .path .join (root_dataset_dir , 'MOSEI/Processed/unaligned_50.pkl' ),
67
+ 'seq_lens' : (50 , 500 , 375 ),
68
+ # (text, audio, video)
69
+ 'feature_dims' : (768 , 74 , 35 ),
70
+ 'train_samples' : 16326 ,
71
+ 'num_classes' : 3 ,
72
+ 'language' : 'en' ,
73
+ 'KeyEval' : 'Loss'
74
+ }
72
75
},
73
76
'sims' :{
74
- 'dataPath' : dataPath ,
75
- # (batch_size, input_lens, feature_dim)
76
- 'input_lens' : (39 , 400 , 55 ), # (text, audio, video)
77
- 'feature_dims' : (768 , 33 , 709 ), # (text, audio, video)
78
- 'train_samples' : 1368 ,
79
- 'language' : 'cn' ,
80
- 'KeyEval' : 'Loss' ,
81
- },
77
+ 'unaligned' : {
78
+ 'dataPath' : os .path .join (root_dataset_dir , 'SIMS/Processed/features/unaligned_39.pkl' ),
79
+ # (batch_size, seq_lens, feature_dim)
80
+ 'seq_lens' : (39 , 400 , 55 ), # (text, audio, video)
81
+ 'feature_dims' : (768 , 33 , 709 ), # (text, audio, video)
82
+ 'train_samples' : 1368 ,
83
+ 'num_classes' : 3 ,
84
+ 'language' : 'cn' ,
85
+ 'KeyEval' : 'Loss' ,
86
+ }
87
+ }
82
88
}
83
89
return tmp
84
90
85
91
def __SELF_MM (self ):
86
92
tmp = {
87
93
'commonParas' :{
88
- 'need_align' : False ,
89
- 'need_normalize' : False ,
94
+ 'need_data_aligned' : False ,
95
+ 'need_model_aligned' : False ,
96
+ 'need_normalized' : False ,
90
97
'use_bert' : True ,
91
98
'use_finetune' : True ,
92
- 'early_stop ' : 12 ,
93
- 'task_type ' : 'regression' , # regression / classification
94
- 'tasks ' : 'M'
99
+ 'save_labels ' : True ,
100
+ 'early_stop ' : 8 ,
101
+ 'update_epochs ' : 4
95
102
},
96
103
# dataset
97
104
'datasetParas' :{
98
105
'mosi' :{
99
106
# the batch_size of each epoch is update_epochs * batch_size
100
- 'update_epochs' : 4 ,
101
107
'batch_size' : 32 ,
102
108
'learning_rate_bert' : 5e-5 ,
103
109
'learning_rate_audio' : 1e-3 ,
@@ -107,7 +113,6 @@ def __SELF_MM(self):
107
113
'weight_decay_audio' : 0.01 ,
108
114
'weight_decay_video' : 0.001 ,
109
115
'weight_decay_other' : 0.001 ,
110
- 'num_classes' : 1 ,
111
116
# feature subNets
112
117
'a_lstm_hidden_size' : 32 ,
113
118
'v_lstm_hidden_size' : 64 ,
@@ -133,7 +138,6 @@ def __SELF_MM(self):
133
138
},
134
139
'mosei' :{
135
140
# the batch_size of each epoch is update_epochs * batch_size
136
- 'update_epochs' : 4 ,
137
141
'batch_size' : 32 ,
138
142
'learning_rate_bert' : 5e-5 ,
139
143
'learning_rate_audio' : 0.005 ,
@@ -143,7 +147,6 @@ def __SELF_MM(self):
143
147
'weight_decay_audio' : 0.0 ,
144
148
'weight_decay_video' : 0.0 ,
145
149
'weight_decay_other' : 0.01 ,
146
- 'num_classes' : 1 ,
147
150
# feature subNets
148
151
'a_lstm_hidden_size' : 32 ,
149
152
'v_lstm_hidden_size' : 32 ,
@@ -169,19 +172,17 @@ def __SELF_MM(self):
169
172
},
170
173
'sims' :{
171
174
# the batch_size of each epoch is update_epochs * batch_size
172
- 'update_epochs' : 4 ,
173
- 'batch_size' : 16 ,
175
+ 'batch_size' : 32 ,
174
176
'learning_rate_bert' : 5e-5 ,
175
177
'learning_rate_audio' : 0.005 ,
176
- 'learning_rate_video' : 0.005 ,
178
+ 'learning_rate_video' : 0.001 ,
177
179
'learning_rate_other' : 0.001 ,
178
- 'weight_decay_bert' : 0.001 ,
179
- 'weight_decay_audio' : 0.01 ,
180
+ 'weight_decay_bert' : 0.01 ,
181
+ 'weight_decay_audio' : 0.0 ,
180
182
'weight_decay_video' : 0.0 ,
181
183
'weight_decay_other' : 0.001 ,
182
- 'num_classes' : 1 ,
183
184
# feature subNets
184
- 'a_lstm_hidden_size' : 32 ,
185
+ 'a_lstm_hidden_size' : 16 ,
185
186
'v_lstm_hidden_size' : 64 ,
186
187
'a_lstm_layers' : 1 ,
187
188
'v_lstm_layers' : 1 ,
@@ -192,11 +193,11 @@ def __SELF_MM(self):
192
193
'v_lstm_dropout' : 0.0 ,
193
194
't_bert_dropout' :0.1 ,
194
195
# post feature
195
- 'post_fusion_dim' : 64 ,
196
+ 'post_fusion_dim' : 128 ,
196
197
'post_text_dim' :64 ,
197
- 'post_audio_dim' : 16 ,
198
+ 'post_audio_dim' : 32 ,
198
199
'post_video_dim' : 16 ,
199
- 'post_fusion_dropout' : 0.0 ,
200
+ 'post_fusion_dropout' : 0.1 ,
200
201
'post_text_dropout' : 0.1 ,
201
202
'post_audio_dropout' : 0.0 ,
202
203
'post_video_dropout' : 0.1 ,
@@ -208,12 +209,4 @@ def __SELF_MM(self):
208
209
return tmp
209
210
210
211
def get_config (self ):
211
- # normalize
212
- model_name = str .lower (self .globalArgs .modelName )
213
- dataset_name = str .lower (self .globalArgs .datasetName )
214
- # integrate all parameters
215
- res = Storage (dict (vars (self .globalArgs ),
216
- ** self .HYPER_MODEL_MAP [model_name ]()['datasetParas' ][dataset_name ],
217
- ** self .HYPER_MODEL_MAP [model_name ]()['commonParas' ],
218
- ** self .HYPER_DATASET_MAP [dataset_name ]))
219
- return res
212
+ return self .args
0 commit comments