) p3 B% G7 p9 | }3 O7 _5 T# ~# _3.2. Spatial Attention Graph Convolution6 } s q+ ~* h1 U! ?% q6 a# m
我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。 S1 l% m. i6 N1 B4 B, k4 \& O9 T* J7 d1 s, \
GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。 5 L, B7 ~) w$ D( E: V! J( @- Y2 D, I, c' d
三个邻接矩阵捕捉了模型的不同方面: d4 { O# T0 h$ x- t(i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。 , l# A/ i: S2 w/ l" ](ii)由全局邻接矩阵捕获的数据集级关键点关系,以及: b* N3 d, S! }
(iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权 % g( t& u# Y6 @! E( { + d; y- V+ x+ h" q/ {+ H( h, ?- s# d# _/ B) V- d
后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。, ]" e4 L# n" V1 V
3.3. Deep Embedded Clustering8 Q' t6 S/ ] J& h% g- A
为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。 ! `6 n0 u4 Y! C' z 0 L9 t. n* q6 _* M我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。# {, m+ ]! w) l) `% L% f
q' D/ @2 U8 m& M7 U9 b, U" k: w7 H
具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。 ) D+ L/ V* J' l( Y' f0 g% U9 h6 X 8 o0 o9 `3 C$ m& s1 J7 D" TST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。$ d3 G; g. @" b. Y7 C
4 W3 Y2 i9 s* y4 w& b' j% }符号 表示; F4 r$ v. U, E( G- y) {
x i x_ix & G( a, |# b5 Ci% n% L3 a: C5 Z, I0 ~" F1 z) r
2 u+ Q- K' ] }4 F1 D 输入示例8 m, i$ `) `* p' n
z i z_iz 9 I, p5 ~6 T* v# E+ M
i 5 [0 o7 R% K3 R3 }0 f3 ^ G# U R0 q
编码器的潜在嵌入 8 w" X8 N5 W5 O1 ]1 d2 {6 P, xy i y_iy , t+ }% t8 ^. @% r: u1 L1 o5 A
i - {* m' x0 U6 ?' w1 P7 K& u- |3 O. ~
使用聚类层计算的软聚类分配 3 G2 u1 O2 B7 |* X7 f/ y [( hΘ ΘΘ 聚类层的参数, I3 b* a5 O% B
p i k p_{ik}p / N) B* L: J5 r4 {+ l6 Y7 A
ik . ?: J3 m: J0 f1 Q4 |9 ? ' R) \- e6 F6 s" B( q2 Y# R7 M* z probability for the i-th sample to be assigned to the k-th cluster; r: u* j+ L+ K& u
: A4 G! ]- c5 X# r4 S0 X& M
6 Q' ~& O$ Z0 o/ m; d( s# D
我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:" C$ M5 M: y$ R* K0 d* U! l7 O
% q3 F' L. ]/ B( `+ B& k7 W1 y3 v# x
& A; x. ^( j! n. E% t' }; P* R. g- B1 i
目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:4 g+ V- v2 X3 |& Y& b8 E
7 l( w8 g( H. _* x* K* D0 U% ]7 Y3.5. Training' S7 g' o$ n! E0 t3 `5 K) Z
该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:* A) Z5 V S { e
{* @- s, A0 dPre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失 . Y/ m6 C/ u! a0 b4 q3 p# v0 P' y% y" y0 C5 ]; ~$ p% I! k# r4 o! u
Fine-Tuning: 3 a1 I. f; n4 y0 d) |$ @该模型优化了由重建损失和聚类损失组成的组合损失函数。 % a5 z& [9 Z! L4 O2 u" S k进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。1 J; { u1 P: c* g7 B9 h
集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。 4 ]7 \' w3 |/ n$ k F4 X: L$ g( n本阶段的综合损失为:+ n9 z. Z1 A/ N% Z7 E" x# C
3 r4 i( n+ b+ A- O) r2 @
* V- c1 {: E; Q# g3 c% l
6 g8 n3 k6 K" U v" n
实现细节# |: W& p) _1 X' F6 N
6 f0 u% J+ m" ^* b, ^" {! r * p) Q7 {) H& l( I* }# y O. V# b0 {, b) u
def calc_reg_loss(model, reg_type='l2', avg=True):% @8 d2 a7 d8 q" n5 e! e8 a- E
reg_loss = None # w y4 V4 J, s. i parameters = list(param for name, param in model.named_parameters() if 'bias' not in name) ; X8 D8 a: Z! x+ |! k) @ num_params = len(parameters)2 g! @0 _1 U. w' E2 L5 N
if reg_type.lower() == 'l2':* `" i, L$ I3 |! W4 P* T/ b9 \3 P
for param in parameters: A2 D) B* ?! y; V
if reg_loss is None: " a, D- c8 `. }: u" ~3 G' H' A reg_loss = 0.5 * torch.sum(param ** 2) . w) j; U1 ]# J& H1 X else:! ?5 }$ y4 U9 j0 Q, ^! M
reg_loss = reg_loss + 0.5 * param.norm(2) ** 26 S; i! c6 I$ o: `7 N8 ]
( P$ c% {/ M" H$ e- q if avg: " a- P2 t: ]4 Y reg_loss /= num_params2 s6 X, E$ f; |& \0 |
return reg_loss # V" E$ q# g, d; l; y3 ]) U) ] else: 9 S( @. l5 c! D( H% O1 V# f, {0 x return torch.tensor(0.0, device=model.device) 5 g% V A5 Q& h4 z' V1! J8 G7 Z/ \5 ?2 c# J. o
2 + [8 V7 ]) d+ x6 V C$ |34 s; `; V/ J* _& Y. a
4 + `& r" a0 ^3 D$ r5 ! n0 h2 I7 X2 U+ g( Z" r65 _: f# O* `( ~! U
70 C( M& V" S3 ^# ^# J' s
8 8 i6 ?8 g, u% F5 t# H: l/ i9% B5 y3 Q' I1 p) H& B0 {) P
102 ^6 Q+ s0 r+ C3 y4 \7 Q4 p
11 % y) c' c2 Y. \6 |* B! f. e' I12 7 b; b6 y& q3 L& ]: N, z: s+ x: ?13 * U- W( |! |# n7 j: u14 8 q1 }% \1 P. e, `15 # m, k. |7 y8 s5 d5 |. Q9 o) W168 Y3 T, j4 I" s2 L( G
! i0 M" I5 Z! n4 v/ J2 ?9 a& a
+ }" y5 q6 U" N7 ` & z' J* @2 H6 }' c4 u5 ^3 x' S 3 A2 B; {6 C7 H, A" ^0 T# o8 gPatchModel(: q; q& q7 F$ `* C) [
(patch_fe): Identity() 7 |" U4 {9 Z1 d3 a5 a7 N% s (gcae): GCAE( 2 z1 s: M% o7 a (data_bn): BatchNorm1d(54, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)/ [5 h7 r+ B5 f5 ~8 b) @
(act): ReLU(inplace=True); k& Q: d, I0 r! l2 k! x8 f# S/ o
(st_gcn_enc): ModuleList( 9 x; f( [7 T1 F/ K$ _ (0): ConvBlock(3 |% Y& F* u' {/ B$ ]# c- X
(act): ReLU(inplace=True) : U+ n" m1 @% t: V (gcn): PyGeoConv( - o/ H. ]" z3 X: V! j d (g_conv): SAGC(# E( n7 d2 E$ k0 r
(conv_a): ModuleList(- U! Q& x5 d, }3 }' }& d! V
(0): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1))/ x' I" C7 t2 R) O% G
(1): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1))4 w# | a3 I0 H9 l! D7 d: f
(2): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1))( |$ [& P& X3 v1 |% h3 E$ P
) : E! q" r4 B0 t (conv_b): ModuleList(2 k; e: S, b. L! ]/ `
(0): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1))/ o) w6 Q# j7 [2 Q
(1): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1)) n7 ~; r% d% M8 w; c7 d5 t
(2): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1)) . Y! {7 f; X& W ) 2 C- O" [/ r- W6 b6 | z (gconv): ModuleList( / T; e4 c7 Y5 g! i G (0): GraphConvBR(% L, v; c" ~# v: h4 [$ c7 ^
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)( ~4 e1 L+ Q: c1 U6 ^
(act): ReLU(inplace=True)5 ~" L$ g+ C& e% ~ B
) 0 {" c* |2 ~. W# B (1): GraphConvBR($ O. k2 c* e/ W% ^* H1 A
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) - i7 t- g& E) j$ h" ~4 ?' m% c (act): ReLU(inplace=True)7 g6 X/ r! z4 B4 |
) 6 D7 r& B) p j2 ~' u (2): GraphConvBR( - ] A( l! A- m# a) o* N. g/ Z2 U (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), O* V. U; h+ N+ t
(act): ReLU(inplace=True)8 w% u) C* i+ u0 z1 U( D$ `
)) @! i0 {8 Y. `) T3 q: w: D
), F0 p7 K/ v8 j5 j7 N- l& \6 w; X
(down): Sequential( % ]8 y+ w* K# p: S ? P6 ~% B; b7 t7 C (0): Conv2d(3, 32, kernel_size=(1, 1), stride=(1, 1)) 1 G8 `; I) I7 N2 |. u (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) ' R5 K! u7 f1 { ) $ p/ x6 v- _+ U. @3 r& @% Q (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 0 f9 a/ {' J+ Y+ V; A! v (soft): Softmax(dim=-2) 3 A$ `7 l2 ?1 m (relu): CELU(alpha=0.01)5 m5 g$ [0 N6 u$ p! o$ {
(expanding_conv): Conv2d(3, 288, kernel_size=(1, 1), stride=(1, 1), bias=False)9 j& z# d+ C, i4 g: |- s4 }
(reduction_conv): Conv2d(96, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)1 J u1 ~6 O& B& R0 A1 f
)* `& y, c2 f7 m4 _! ]% h0 s
) 0 ^1 u$ [8 }+ M: p9 f0 U5 t (tcn): Sequential(5 E) {4 i5 ]& j7 `" ? x
(0): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)' _3 X; g/ m% K& }
(1): ReLU(inplace=True) - _& u( ~5 T7 c4 b% M (2): Conv2d(32, 32, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))/ [; [/ f& H4 t2 X6 X7 d6 k; F
(3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) - d, s4 W' f7 U, J (4): Dropout(p=0.3, inplace=True)& d9 _& [8 {9 K
) ' p$ _) l+ I: m4 ] ) 0 e8 Y2 R6 y: z' {6 G (1): ConvBlock() Y, a* m5 P$ q- o
(act): ReLU(inplace=True) / x* k8 l* y: ?5 h (gcn): PyGeoConv( 6 g2 U- P( N$ C: n1 E4 O1 s (g_conv): SAGC( U M0 w# s: ?3 Z! h
(conv_a): ModuleList(, R( i% t8 [& @& A* C' E
(0): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1)) ^) d3 L# T: b4 ]: v7 }* k+ M5 x
(1): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))2 j' b" u: c, X+ i$ `
(2): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))" v" ^; z' A0 {: n( a
) " B, w% e( M- H (conv_b): ModuleList(8 N7 L" J7 y' Z- c b$ ]$ t# R
(0): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))/ M( m% j3 D! T/ D/ d
(1): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))/ r5 s! r/ x" k) {
(2): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1)) 1 u- `9 ]8 P$ J' _% b ) $ f5 A# H2 h4 X, y (gconv): ModuleList( & e3 n" W( A( Q: P0 K) K (0): GraphConvBR( ; t0 D& s6 F# _* P3 c/ e (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) $ G6 x }% b- M4 e' k (act): ReLU(inplace=True) 5 `9 d+ ?& r& @' f4 X! j& | ) + M [- f: `- G) _& Y! T) q0 ~ (1): GraphConvBR( 3 [# Y3 E* ^7 G8 S1 y4 M$ F (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) ' f4 z5 ~: H9 v1 }' h6 N. r (act): ReLU(inplace=True) ' s. f- ]# d) ^ )6 r9 O& i% P4 a, v; u( ^
(2): GraphConvBR( & Y0 c( z( _/ h$ o! S2 ] (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 3 `) J, O- c8 [$ v$ G x (act): ReLU(inplace=True) 3 N4 Z8 M+ r9 k8 O8 T: A: f. \ )" _; |/ R1 K8 [+ b
), o9 T2 m; A' k9 \! h( {
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)- b" z& {. q2 p4 q) s
(soft): Softmax(dim=-2) " ^+ C; C u( s (relu): CELU(alpha=0.01)9 N' c+ |$ n2 l1 U/ N
(expanding_conv): Conv2d(32, 288, kernel_size=(1, 1), stride=(1, 1), bias=False) c& h1 _% W. W5 O9 X8 X: F
(reduction_conv): Conv2d(96, 32, kernel_size=(1, 1), stride=(1, 1), bias=False) : }; c9 U4 Z( s1 b" E/ q )1 d7 \ l+ w9 |2 F$ m
) 8 J! D0 \7 z p3 D' n# {( E0 { (tcn): Sequential(/ Q& i0 m& q7 p' s
(0): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True). M2 w0 ?9 v3 S& K# p
(1): ReLU(inplace=True) & }" b( N9 b+ c% O) z' V (2): Conv2d(32, 32, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0)) 3 t; |, `7 Y: _( j- b8 K (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) & y8 l# {& V1 ` (4): Dropout(p=0.3, inplace=True) 9 R+ ~, v2 S2 M5 }. K; a# ~ )4 G3 n* |* W; E% J' M: v4 z3 G ]
) - d4 c! [8 z8 K1 a7 p7 _4 ]2 ]8 ~ (2): ConvBlock(3 f H- `! c- k3 P: R" J
(act): ReLU(inplace=True)0 @8 X5 G+ n; p6 ~7 }
(gcn): PyGeoConv($ k6 t& ]% p: k" _! ~7 x$ }, B0 [
(g_conv): SAGC(" ^8 N9 J) m; f
(conv_a): ModuleList(9 t2 k P0 F# S3 d2 I b3 p
(0): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1)) + D" n3 {) l6 M. j# @3 h3 Z (1): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1)) B; S8 ?' E9 @' U# z' r/ t (2): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))* S" \3 z: r' I5 t
)' s* }+ K& P4 D. e& y9 k) t
(conv_b): ModuleList( : P4 F: B# z# p (0): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1)) ' t x0 }; Z" H7 Q& l+ y3 v0 o (1): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))0 ~* e! u8 \9 p8 l
(2): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1)) . `8 A4 K" d d( S2 N, @ m ) + n+ x; Z# a; V- \* ^ y" }: o/ U (gconv): ModuleList(+ K) e5 ]4 J+ r% J& k0 I
(0): GraphConvBR(; \: l1 q7 S& P( ]; s
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) ' J, y6 n% Q5 @$ ^! ? (act): ReLU(inplace=True) / b% L, ?0 k. d6 n+ C: q# ~- ^9 V ), D- d6 X! B4 t# `; D) X
(1): GraphConvBR(# r6 c& X/ l, i- A& X
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) - y$ T/ Y& n' ^, `2 W& ] (act): ReLU(inplace=True)0 w2 C* b: N/ ?3 Y
) K. j: X- o( \* R/ X' F (2): GraphConvBR( % ]: D0 _0 ^. i; |2 B! o (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 0 y) m+ ]' g* q3 c% K/ @ (act): ReLU(inplace=True) & J' Z- g3 x1 N6 w& |5 R. M+ [ )$ f2 c9 A2 }9 [$ T9 d7 t6 x
)# r6 ]2 O u3 t' u
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)6 v) _! L+ r( J& ^% g! E4 L1 y
(soft): Softmax(dim=-2) 8 `" q5 k4 ]/ j- M- x8 F: R! ? (relu): CELU(alpha=0.01)* g" y* l0 [9 R
(expanding_conv): Conv2d(32, 288, kernel_size=(1, 1), stride=(1, 1), bias=False) 9 g. [$ I9 n. t6 m- s3 a* A (reduction_conv): Conv2d(96, 32, kernel_size=(1, 1), stride=(1, 1), bias=False) : z( n; [, e& h# M# e9 |' p )3 q( {* i [" v0 E2 z7 C' q# q! O: M7 K
)! @" X7 U1 N, {* o$ {! E
(tcn): Sequential(6 D+ E. a; `' Q% i5 j( ^/ i& C
(0): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) $ C6 d2 T2 }6 d+ v (1): ReLU(inplace=True) " J/ j6 q1 Q) s3 e: ~. X, g: t (2): Conv2d(32, 32, kernel_size=(9, 1), stride=(2, 1), padding=(4, 0)) " h$ g' n6 M2 H( u2 e (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True); e# C0 }3 _) D2 t) ]4 |
(4): Dropout(p=0.3, inplace=True)' l: H$ b! V6 Q, @
) 6 h* b8 @& r4 X- \- ^ (residual): Sequential(" J% y6 W; Q' u+ U% d. o
(0): Conv2d(32, 32, kernel_size=(1, 1), stride=(2, 1))# T) r3 N( W: W3 n9 |' p
(1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)% V3 A1 }0 F- {7 s& ^
)* t5 K$ c2 k8 i+ W, M
)4 L. N% a" `% B' W( P; i2 ]
(3): ConvBlock( $ ^8 n" o/ r% s% c/ X+ O (act): ReLU(inplace=True); `, u( I! F( [$ D0 s1 N
(gcn): PyGeoConv() C! d) g3 }, J( Z( i. [# {- c
(g_conv): SAGC( 5 ~6 |4 H+ g2 K+ _0 P! S, T6 i; s (conv_a): ModuleList(: K$ n" ~# r" O+ `) s
(0): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1)) O8 G7 f. n: t1 |3 t (1): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1)) ; w" M% d$ z! v$ T (2): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1))* A1 m* i" A ~
) " T$ y2 o7 R9 I (conv_b): ModuleList( ; |- N! T9 f# a' {; m (0): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1)) 6 N- [0 l- L* ^ (1): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1))' h2 Q: f& o( ?! p2 |
(2): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1)) 7 h" t/ E% e# Q' E, u- J3 J0 `: a ) A5 |6 b V* G5 t+ W& \
(gconv): ModuleList( # h/ Q% t/ e9 o! R; l. [ (0): GraphConvBR( , n; Q: m& n% N9 Y. r* t (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) ( f$ S% m# P. v- j$ \ (act): ReLU(inplace=True)6 Z" f r, Q9 v! i9 J3 ~9 @! k5 H* [
) . P; P3 }" r5 i (1): GraphConvBR(8 |4 |% t0 g2 _3 b7 I- r# x
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) - I2 ^+ O% h7 Q. s( R (act): ReLU(inplace=True)0 E5 j0 E: F3 |' o1 K
) 2 p1 Y; L- V8 ~( y1 @3 }1 q (2): GraphConvBR( S0 C1 X' u: |
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) ; N$ J# _. e* Y1 f9 E. D4 ~: @. ^2 ?2 H (act): ReLU(inplace=True) 6 x8 V# d2 q& q3 u4 y ), r5 z r) B/ e4 o# v
)' F. V6 }4 q, ?
(down): Sequential( 3 t6 O; c+ p- B* q: h (0): Conv2d(32, 48, kernel_size=(1, 1), stride=(1, 1))5 m0 W" @/ T! H+ T
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 7 j4 B4 q' a5 D F# s ) 9 t4 r9 _3 {: a! a (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)8 ~/ d# M+ c) h5 S% y( m
(soft): Softmax(dim=-2) : Y* W$ Z0 c, V! b! i (relu): CELU(alpha=0.01)& r& T$ y9 y/ C3 a- t( `$ J
(expanding_conv): Conv2d(32, 432, kernel_size=(1, 1), stride=(1, 1), bias=False) 1 c) U; b+ S `) ] (reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)( g7 R9 b4 ] v( k; D$ E0 I' t6 ?
) 1 @' T, P1 w- v0 V; j; P" e, ~* H ) ( [1 M t% ^ d6 } n5 l% G C W/ ^" j (tcn): Sequential( . H9 v7 t: N# h7 g7 s0 M (0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)5 h2 |9 R! i8 T5 o- i. [
(1): ReLU(inplace=True) ' ]8 H7 F" U8 m (2): Conv2d(48, 48, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0)) 0 Z3 ^% u4 F9 `& ]- `& U (3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)7 w5 v) f' }: [# b
(4): Dropout(p=0.3, inplace=True). T* I( l/ Q5 S
) 2 W6 v4 v+ C j" q4 P W (residual): Sequential( ; O6 p7 T+ {0 y& R (0): Conv2d(32, 48, kernel_size=(1, 1), stride=(1, 1)) 6 ~* |+ z6 }6 T* v; t& ` (1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)) Y9 Z9 u0 j& W9 T
) 6 z3 |0 H3 ~" T) f: X )( P: f* A! V% f) L' c4 j$ f
(4): ConvBlock(, g$ J4 j1 ?3 g% ]- ?
(act): ReLU(inplace=True)/ Q% m3 u0 c% Z, p- K4 F, g2 x
(gcn): PyGeoConv(: R J! o: o2 _5 t5 T4 C I$ W9 i
(g_conv): SAGC( & L* D, S0 o N1 g (conv_a): ModuleList(' U) S" I# a6 a8 p
(0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1)) ( f$ a( g I* P3 n* |, P& F" [! z (1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1)) ) u8 e+ V3 W' c (2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))" e9 q2 u# B3 {/ `, n* n' v
)* v: P1 e" m3 |6 x6 h# A# @$ v4 U
(conv_b): ModuleList(" \: L4 j- m8 _4 f! J
(0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1)) 4 w( b3 N2 R) t4 Q. B4 A( | (1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))8 B4 I: ]; Y2 i: x9 E5 L- b
(2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1)) ; o, F6 ?5 N, H6 p! y, [ )* F3 g/ K- `8 Z' ^" t
(gconv): ModuleList( Z4 c. r9 E% f" p
(0): GraphConvBR(8 R6 ~3 U1 s: Q5 x: L/ E, G5 V
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)) V. I6 n, D7 W8 e$ i
(act): ReLU(inplace=True), U, p( Y1 e6 @7 K. q1 ]
)" L* R9 R8 j2 G0 H( p' N
(1): GraphConvBR( & K% a- o6 L, z, O6 [ (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)" U7 Q( z8 k, ~! v3 S3 I
(act): ReLU(inplace=True)' V+ O! L& `* V H1 X1 e% e
) ( g( U* v5 w8 i$ p (2): GraphConvBR( / ?- W6 E3 w9 G1 ` (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) & W4 @$ E1 d& e# G& ]6 ?3 Q1 Y (act): ReLU(inplace=True) / i0 ^7 v X8 s- u ): k9 Q7 J E. @0 t3 [
) & w1 R b8 _& p: y (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 5 `& @# n4 [, R6 d5 }; A" n (soft): Softmax(dim=-2). ]" L3 k" w j) i1 a
(relu): CELU(alpha=0.01)9 V# {+ B- M$ h1 w; t N
(expanding_conv): Conv2d(48, 432, kernel_size=(1, 1), stride=(1, 1), bias=False) I4 A& S- K- e8 N" g (reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)2 s; n5 `+ X7 ^+ B" E9 O2 u
) 1 H6 L3 U+ X: K5 S; Q! y )% I8 u2 e) [& w7 }9 j% U; {+ ?
(tcn): Sequential(# h$ n7 I# `2 V5 Y2 J
(0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 8 Y2 J8 B. A- ?4 |$ @ (1): ReLU(inplace=True) g1 k8 R+ [2 b) v" z0 r7 y (2): Conv2d(48, 48, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0)) 2 B( P! ?' J1 O; r9 d (3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)3 h, v! p: f3 a9 f* S
(4): Dropout(p=0.3, inplace=True), t) p: {# f4 n$ X) D5 A2 p
)7 q! s, {$ H3 e. l2 d
)/ }7 U7 G7 n1 z1 ~
(5): ConvBlock( + I* u1 g, V! b" l5 L (act): ReLU(inplace=True) ' u+ k7 e ?! a* m# }( A (gcn): PyGeoConv( ^, ~& q+ _# y' C
(g_conv): SAGC( # R. O+ C0 G( y5 c, f# r (conv_a): ModuleList( + ?; y2 X9 M" O. x# d6 ]; X (0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1)) / \/ M3 |; z; I( q) S, `/ r (1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))$ Q. U# I% _5 F/ B9 @0 J
(2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))4 L# F! H6 P+ z
) + e# O$ T7 J9 P% r, e (conv_b): ModuleList(8 r% q8 ~+ h1 i8 z5 G+ }! ~' p
(0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))8 o2 ^" t. v7 o. m
(1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))+ \2 Z0 e8 g4 ]2 g! N+ Z; W* I0 P
(2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1)) " D$ J6 Q7 W* P7 e )! v4 k- d) I! @# `; |" |
(gconv): ModuleList( / z$ n6 a% \* G (0): GraphConvBR( 9 P7 K3 K: q1 z: `8 r7 S (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 5 k p; v( X! N( S8 X (act): ReLU(inplace=True)7 r9 C/ q# b/ ?$ g; G: J2 Q' s: {
) : `! D& J6 v$ @9 b' r (1): GraphConvBR(% M- j5 r. [3 o
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)3 p- G- Y4 s6 s
(act): ReLU(inplace=True) 1 l9 ~! u$ _7 q( V )- H1 G/ E! n f+ C1 D5 j7 W
(2): GraphConvBR( - ~' `, ]. B) I5 `# c% q! } (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)$ o. o3 C a; v2 f M8 \
(act): ReLU(inplace=True)- T* T3 h9 V) z) I
) ' ^. ?# s! d _4 O ) , @7 h+ W- M% L( h3 y (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 7 d' \/ b; I P- ^$ B5 p$ K$ H (soft): Softmax(dim=-2)& `, y& g% w; j7 ]
(relu): CELU(alpha=0.01)4 \$ r. ], K. ^
(expanding_conv): Conv2d(48, 432, kernel_size=(1, 1), stride=(1, 1), bias=False)2 `2 b& H$ E# u
(reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False) * A/ o2 h0 W) y5 w ) / C5 `% s: ~6 u9 X ) \1 x3 G6 h1 a: c9 O- r9 j# f4 ? (tcn): Sequential(4 p U* ~& `/ w3 ^: h
(0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)- k3 S/ B! f- ~1 O
(1): ReLU(inplace=True)9 q/ |5 C/ Y) `4 _/ a3 \% A7 `7 r6 ~
(2): Conv2d(48, 48, kernel_size=(9, 1), stride=(3, 1), padding=(4, 0)) 3 ?7 H; U0 P6 `3 X: W (3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) + J2 B- N8 n9 l6 ^2 y (4): Dropout(p=0.3, inplace=True) 3 E1 f! H# R6 p7 ]" h' A% U2 s )+ r, c" I* P8 m3 A" d- t$ B
(residual): Sequential( ? N8 z, B# c6 J7 L4 ? (0): Conv2d(48, 48, kernel_size=(1, 1), stride=(3, 1)) ; |/ [8 F+ M# w% L (1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) , m# o& W, U! _; N ) & ^' H3 ?4 }' U! q$ q )( U0 @: X C6 s% _
(6): ConvBlock( " Z! t0 u* g3 e& Y+ b4 |' _4 s (act): ReLU(inplace=True)- p9 M1 G* e6 W# | f6 R8 H! A
(gcn): PyGeoConv( $ o" n9 m1 T# h9 _' N' J (g_conv): SAGC(, K% @; Z# I8 P$ \
(conv_a): ModuleList( " i/ f: _) G( u( v (0): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1)) {+ u4 E4 _( l/ C! m0 `
(1): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1))6 e, v8 |8 O& R
(2): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1)) ; }! U9 c, D, `5 V7 o( X1 v )( k/ Z/ }6 c8 K; O# }. M
(conv_b): ModuleList(& b) j* }! {5 y
(0): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1))) x3 G& V- X, S0 K; V& @: Q4 f8 G0 D4 T! i
(1): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1)); p2 \. L Q8 b1 H9 |2 L' h
(2): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1))9 O1 `2 I. Q# P" Q, y; c
) 0 M8 A( T2 A$ R' t6 Z, t5 [+ u2 O (gconv): ModuleList(' {; N$ P7 ?) a2 g; t
(0): GraphConvBR( 2 R0 S5 K! U( J8 t h' v (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)) \) A, y( v$ Q' r: c
(act): ReLU(inplace=True)6 a( N. y/ }6 {0 m5 B& Z
) / g/ Y* Y) L& G9 I& D2 C" T: w (1): GraphConvBR( ' [4 Q% W5 Q: U f1 e4 F8 W (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) # c T% I6 j& A; I6 N2 s8 ~7 K (act): ReLU(inplace=True) $ [9 f" y! t6 x, Q0 n5 ^- O, O ) 8 e: y$ V8 l: b1 n9 l: N0 _- x; [ (2): GraphConvBR(- Q, B. i' X3 ]9 R& [: h
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)9 M4 T6 r: K F0 I, r4 X8 M
(act): ReLU(inplace=True) 3 T6 }2 L% G4 V9 ?0 e6 c9 t& _ )$ Y/ W% S- q3 ~+ b. a; }
) 7 E, b6 ~' W- P (down): Sequential( # i/ ]" ]$ a$ R7 D7 u- | (0): Conv2d(48, 64, kernel_size=(1, 1), stride=(1, 1)) 9 I% R& M$ ?8 a- f( f (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) - T2 X: D' Q [/ L& k )9 k! Y3 T$ {8 K6 U4 L# P' J1 [
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) ) J/ h3 y% E2 t1 D" w* ?, \/ I h (soft): Softmax(dim=-2): ?+ w- P; v1 }1 I: l/ b6 k
(relu): CELU(alpha=0.01) ! C; v s, |" z) l i2 B$ U* l (expanding_conv): Conv2d(48, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)& i/ N! m% B# s; R8 y/ n
(reduction_conv): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)' R" Y- H. a$ _2 }* T
); a4 q) k+ C Y
) % B. G# _+ ~( Y0 `' p (tcn): Sequential( , O; V7 L' l$ w7 V3 F- O5 _1 e (0): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 7 v) \& _0 f( k# d8 i (1): ReLU(inplace=True)1 e) O5 s' [0 a) `( K! K
(2): Conv2d(64, 64, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))1 g4 H p9 i4 K! {% W, k f; X
(3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)8 q) N: ^: K4 d' x
(4): Dropout(p=0.3, inplace=True) 1 a: h( I! j8 G3 M- r )5 f, I& E4 t2 P& Y% |
(residual): Sequential( . }4 Q4 `8 E' p0 e+ l+ k) B (0): Conv2d(48, 64, kernel_size=(1, 1), stride=(1, 1))0 u% d& d) k+ u/ Q
(1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 9 E! E, L, @' w$ k' _7 } ) 4 [8 K/ I2 ^8 M# z9 y" K: M )0 T: r) T! l7 @- A
(7): ConvBlock( , @" H! a t; B0 H (act): ReLU(inplace=True)2 l9 _4 L+ h/ F5 T
(gcn): PyGeoConv( , }; l1 \9 h' ^1 k) m8 F (g_conv): SAGC(- q+ {7 Y) d/ K7 Y L9 \# Y) n
(conv_a): ModuleList( " `7 T! r" K/ \$ ]8 [8 U0 r- H- K (0): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))( }% b/ H% a) v, |- B7 H6 u
(1): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1)) ( Y# Q$ t( Q, f: | f3 I$ w (2): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))/ S$ M" Z' @( A# e& u( R' _
) , ?3 S9 Y+ j" R3 f% y' K (conv_b): ModuleList( . Z/ t+ {5 ?: j; x) }1 E (0): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1)) # m- n" K h) b- V9 G (1): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1)): V8 I3 T v! \/ m% L8 _" c; g @/ ^
(2): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1)) ! B. s6 q2 f: z5 ^ )+ Z+ r: u; S" o& C9 _
(gconv): ModuleList( 8 u2 n- w1 d9 W. e( W3 g (0): GraphConvBR($ V# x, {4 @$ [- s. F% \! W
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)+ S6 H. h V1 V- [7 n( D+ ~
(act): ReLU(inplace=True)" q0 Y# B! j- v2 s- q8 V
)) V6 e- u3 ~4 Z! @% R- U& w
(1): GraphConvBR(3 B' @1 C1 h& o% u2 P( N
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)5 D& k {5 {. j6 l8 x( I2 m. j' G8 g
(act): ReLU(inplace=True) * \$ E& h$ {: q5 ~% H4 e )) W9 M( m* z7 ~6 s# l
(2): GraphConvBR( : k) S1 v3 r6 m7 O5 e9 L- m* ]! L (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) b7 }6 a7 D1 @9 f5 w
(act): ReLU(inplace=True) : ~- j1 l% Z/ V! l3 O! B7 J, V% W ) 0 D& A5 ^0 K4 T* W6 _ ) & p7 W0 ?8 J. v. ~5 X" N: |+ t$ U- S (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True); s0 s$ p3 I6 R- v% i; R9 U s7 @
(soft): Softmax(dim=-2)6 u6 Q) J. `+ f* g0 F
(relu): CELU(alpha=0.01) * N1 u, ^4 h, V- x" W( M+ ` (expanding_conv): Conv2d(64, 576, kernel_size=(1, 1), stride=(1, 1), bias=False) 8 k7 p( c, _( J$ \ Y (reduction_conv): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False) # I! J! S- v' b2 \ )% B' `1 Y5 v: Z3 j
) M! r9 ~. O/ B6 \/ O (tcn): Sequential( 1 c# g! Z" Y) k9 W* \* Z h* ~. b (0): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)) `9 k: w) X4 I8 Y0 I3 w# n
(1): ReLU(inplace=True) 9 V& Z3 Z6 l$ r. E (2): Conv2d(64, 64, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0)) ! a) g6 L' d* E) I" \3 o" M (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) - s% t8 A4 F( ^ (4): Dropout(p=0.3, inplace=True) . H! y/ ^2 D2 f) h ) 5 E, L3 R+ X$ g$ N- D6 Z )/ j4 @9 A. |. v3 X% z
(8): ConvBlock(9 \; _+ [6 p. E: ]+ R5 p6 G: D
(act): ReLU(inplace=True) \" D4 \3 a8 e( ]) |3 z2 t& q
(gcn): PyGeoConv(: M$ D4 L/ |0 f/ r0 L' D7 ~
(g_conv): SAGC( 4 z( B, }+ o% D' D5 i (conv_a): ModuleList( 1 V# x: W% r1 t8 I1 { (0): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1))6 g6 n' a( P' ~! ?7 V
(1): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1))3 Z( X' A% t; }+ j6 {, m
(2): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1))2 z `9 x2 `9 i/ n/ z4 E0 R
) . T: @. m- ]6 R$ u# Z: _ (conv_b): ModuleList(/ W- T1 s* ]6 s7 R2 Z0 j! z
(0): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1))% Q0 ]' P9 m& h, A# L# `
(1): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1)) : E R6 g4 \; `) J# [( n4 C (2): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1)) % y" d* K1 L5 h% { l1 Q )& P* o/ D" T4 k, `$ Q: z* V
(gconv): ModuleList(7 @, C4 [7 }4 w
(0): GraphConvBR(4 M* Q% R$ a2 {8 t
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 7 l- }) e- K- P1 t! X* l! o7 H6 V: ? (act): ReLU(inplace=True) 8 W, L+ \7 O) E" z ): X0 E, p1 _5 O- ~1 q% i& w
(1): GraphConvBR( 2 v" [1 b! [% m! y$ o (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)5 \# A# C m+ _, V& A
(act): ReLU(inplace=True) ^5 i% o% E8 ]' ]2 \
)6 H8 m0 u8 V: g# U) d
(2): GraphConvBR(0 G4 l4 J- J: Y, r
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) - v. Z; [: L7 I7 P& ` (act): ReLU(inplace=True)) r) K9 K/ ~/ L, n5 `* g) D# }8 l5 [
)) H$ A, }* l$ y1 G7 m
), _. l7 B) O/ O+ Q8 B
(down): Sequential( $ F$ c1 J) Z7 B* Z& i3 c (0): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1)) + E- }% @0 [6 o% q4 V1 G: c (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 9 T% F" t1 g' w8 J9 s+ s" p ); R7 [6 t6 X9 B# i# e
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)8 W/ ~. [) K$ Y" g4 V) _" z
(soft): Softmax(dim=-2) . L& P `; c( ~( l (relu): CELU(alpha=0.01)+ r1 k( G1 M) w1 e- D; M! N6 j
(expanding_conv): Conv2d(64, 288, kernel_size=(1, 1), stride=(1, 1), bias=False)0 [; k" B1 I; }/ g, `* y. J7 k
(reduction_conv): Conv2d(96, 32, kernel_size=(1, 1), stride=(1, 1), bias=False) ' _+ ~" y/ }4 X# f6 C ) 5 p ^$ p9 g2 R/ W& p6 X )* j; v9 [4 @3 q* d2 d& M3 J5 @. N
(tcn): Sequential( ! V5 M4 Q: F# v3 d5 R (0): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)" H, R3 ~! d6 G
(1): ReLU(inplace=True) / C) q) _9 ]2 Q3 i* h F' Z6 M7 C (2): Conv2d(32, 32, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0)) y) I$ w# D7 V2 f* U' t
(3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)* b) \, R% q0 d3 R3 b) [
(4): Dropout(p=0.3, inplace=True)* D& K5 f4 m' F: ^/ q2 \; F: h
). _* Q4 i* s I( g& A9 b' W0 k
(residual): Sequential(8 m8 z5 O2 f3 f2 ^2 R# g
(0): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1))/ u2 v$ Z% w- Z: r# r
(1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)1 g/ n# }; [' B7 z
) C$ c& W) ~" u( c7 g% b7 r4 z K2 k9 z, ?
) : D" ^+ \2 ~( j7 Y ) 3 { c- N6 v8 \0 O. g& } (dec_final_gcn): ConvBlock(7 T' ~" x& j3 d4 J1 [
(act): ReLU(inplace=True)0 n! P3 w; h" @8 C
(gcn): PyGeoConv(- [' n$ y$ W- W/ f
(g_conv): ConvTemporalGraphical(! ^: q, r' J1 ?% @1 S# q+ l
(conv): Conv2d(48, 9, kernel_size=(1, 1), stride=(1, 1))3 d. K% E5 H& ?8 n7 D6 N1 d8 J K6 U
) 1 y$ A4 m# @9 r U5 \5 T )9 m, g5 k8 N- H0 O; k% `) X
(tcn): Sequential(' D- o$ Q& t3 H3 g
(0): BatchNorm2d(3, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)4 M. Z! b# N- j
(1): ReLU(inplace=True)' T; a& l9 L2 f7 m* C
(2): Conv2d(3, 3, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0)) / m6 V0 I8 e4 f6 f' M4 J: Y (3): Identity()) R( t5 E2 S" O4 [ X6 t5 o* Z/ c
(4): Dropout(p=0.3, inplace=True)# @5 B4 t6 I4 i
)5 k. v% H+ e, t3 ^. A) _
)3 R3 Z7 Q* o7 c* ^ O G
(st_gcn_dec): ModuleList( ; {5 \. o" G% i2 d) N3 } (0): Upsample(scale_factor=(3.0, 1.0), mode=bilinear)5 F* Y n. P% B( y# E' j* C
(1): ConvBlock(2 v4 v- V/ Z' W! |, P7 ]
(act): ReLU(inplace=True) - R9 V9 p" y7 A1 e% l# g (gcn): PyGeoConv(1 E* t: B0 j* j5 C
(g_conv): SAGC( " F# h/ m+ B; o (conv_a): ModuleList(6 D. @6 Q+ Q. h
(0): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1)) * n; l O* W1 ?8 n (1): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1))( x5 G, u+ z" m& d) a
(2): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1)) ! F- |; ?* ^0 j! y# K5 a ) C& u2 a# ~* D2 @' Y2 `! `
(conv_b): ModuleList( 0 |% \+ b3 E/ N+ X* y5 L (0): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1))2 u0 X3 W% u. t$ \) z0 \2 q: m% q# T
(1): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1))- [7 x& K, d. Z% p% m( I
(2): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1)) 7 [5 s& Y( D8 u% E )0 K) p) }5 W* ~; P) @: n. U6 S8 {
(gconv): ModuleList() ?) }% `" n! {$ D- i
(0): GraphConvBR( * e, q8 j. n1 @! H0 I2 v F (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)! `2 z1 C$ M+ t h2 y( I
(act): ReLU(inplace=True); [( G" G d% Y
) 8 w/ w3 h7 }% O2 B- E, m (1): GraphConvBR( 0 h1 `' D- @9 T0 i+ K (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 6 C/ U) B7 s* S: f5 K! G( d (act): ReLU(inplace=True) ( V+ \6 M- ]) | ) ' K7 ]8 f4 S) H0 @$ | c# _ (2): GraphConvBR($ O3 R* Y( W+ V. z
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 8 t* B$ a6 q' j (act): ReLU(inplace=True) * K. x% ]9 e" A ) + A5 `5 K, H+ Y, K )9 A* \ L) ~: t' ]7 D
(down): Sequential( ' Y/ E, q p e Q, K( o ]. h/ t (0): Conv2d(32, 64, kernel_size=(1, 1), stride=(1, 1))# f# B. ^+ v6 g1 t3 d
(1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) " \6 T* \! z- Q; ^# a/ G+ z* T* z )' j4 W ?0 p2 A/ U( B
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)- M" e* ^0 i. `0 ]# R
(soft): Softmax(dim=-2)6 o3 N0 y: `; q
(relu): CELU(alpha=0.01)1 p9 k( g! Z. L5 d; t! |
(expanding_conv): Conv2d(32, 576, kernel_size=(1, 1), stride=(1, 1), bias=False) + R# y/ P# w" f) A (reduction_conv): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False) 0 T3 c* g' @5 R5 P8 n J ) ! s( ^" v) u7 c: J6 @# o' s8 z3 M ) 9 T% E! T- ~: Z/ y# ] (tcn): Sequential( 7 ]" h; \6 R" w$ s' C- y, c (0): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)8 n3 D0 o0 [, E; I/ @1 ~6 C" x( _
(1): ReLU(inplace=True)9 y @ O3 N a
(2): Conv2d(64, 64, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))7 \5 y7 n8 w" o0 U. U' O
(3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)6 B ~ v s! {$ y, P
(4): Dropout(p=0, inplace=True)6 n3 |) }( @: N& D/ G! K
)$ z* L& Z, w. R( h5 ^
(residual): Sequential(# h1 n O6 V1 ?5 c" a6 N
(0): Conv2d(32, 64, kernel_size=(1, 1), stride=(1, 1)) 7 ?& |9 x* G2 w (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)8 }. G7 d6 }) z" `( v) M
)" Z1 X; T# N) d: `2 a) ?4 y
) " S) p2 u4 ^% O; K+ A% x (2): ConvBlock( ! b" J% e# r( F0 p* @' @& | (act): ReLU(inplace=True) 1 q3 `# H* @; [2 ~: G (gcn): PyGeoConv( 4 U' n1 X) {" u4 l( T (g_conv): SAGC(' o/ G' {. J+ `
(conv_a): ModuleList(1 R' L _3 J) V4 @
(0): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))4 N) J1 o- o3 s2 f/ } u* J
(1): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))/ C/ |5 h3 t# K
(2): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))' U' T# T+ v( ~
) : B* ?7 N( e, z; f" K4 Z (conv_b): ModuleList( 7 o0 H+ D6 l& I) \( k! S (0): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1)) $ V3 r* [$ j* d1 E (1): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1)) ' m$ m* C! M, p (2): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1)) ( T0 c' t# T" A3 W% q ) O4 o9 W |' W& r0 W
(gconv): ModuleList(* k) [1 C, y. q6 X% m$ }
(0): GraphConvBR(4 U. K5 D; s. r! e. n8 Y" L
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)% B. ?2 e4 P h
(act): ReLU(inplace=True) 9 R8 U: G; p6 Z! B$ K2 a+ M: ^ ): z' U! j3 h/ _
(1): GraphConvBR($ W* ^# Q _: W1 e! ?
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) , ^4 z, h3 \+ B" R (act): ReLU(inplace=True)! l1 V! d$ _ X8 S& f+ `
) 7 G8 r; p: a g* _+ a$ | (2): GraphConvBR( ! G! w9 ?) v' Q" x3 N (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True); }+ a# r1 T) H
(act): ReLU(inplace=True)9 d4 G* t9 }: b1 t- d9 B( o6 w
) 7 J8 Q9 _1 u' x5 ^( a8 {! p1 L3 B4 c ) , k3 a$ }. Q- P S( g$ Z (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) `0 u/ L# ~7 M7 N (soft): Softmax(dim=-2) % m& R* q5 C1 h6 d" k (relu): CELU(alpha=0.01) b8 V: g$ b6 v2 l% J
(expanding_conv): Conv2d(64, 576, kernel_size=(1, 1), stride=(1, 1), bias=False) 2 ^6 A- v T' j6 n$ k7 ]* x; w (reduction_conv): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False) 7 D: i5 k' r1 q )' w9 Z' `, j$ R
) $ v8 t2 o z: x! m, _( B1 {+ b: B# ` (tcn): Sequential(: F! g: H* {( X$ L4 D4 w
(0): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 0 O' Y# I3 E6 x# G (1): ReLU(inplace=True)/ l% h; [9 A+ k2 O$ \
(2): Conv2d(64, 64, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0)), V. i) x2 D% ]. X
(3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)5 [5 j& L3 p0 |1 p
(4): Dropout(p=0, inplace=True) # ~0 B2 X$ V. M. U )* o$ W$ f5 Y. U! Y; Z% ^
) @& E0 a; f8 A7 m$ U (3): ConvBlock(8 X. q8 {* d: r. \6 X; A; Z7 }
(act): ReLU(inplace=True) p8 V$ ~8 E* r4 f! r$ V
(gcn): PyGeoConv(% T8 x' R `4 h; D* [
(g_conv): SAGC( ' o/ a- R8 W. w3 n' T4 N* F1 f (conv_a): ModuleList($ r2 `/ G3 r( H; ~
(0): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1)) + [: e8 r( s7 B0 T! _$ c: m (1): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1))3 G: P* [* s- f4 E9 y; @# Z% G! t' b) T
(2): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1))+ k# D b0 r$ M+ k2 {
): E# F8 b1 F' O8 Q! y
(conv_b): ModuleList( G! @! { ~, @
(0): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1)) 5 f4 v h, \6 q# G (1): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1)) 0 |4 O! ], Z( O7 a% l% T2 y% o (2): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1))' I$ j( M' P A# G
)2 {' v8 a+ {/ f' l
(gconv): ModuleList( ' R6 d4 P9 g8 X& U# y) k/ y (0): GraphConvBR(" O9 D7 u, @* r0 @4 z
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True): Y! r. o* E9 b' r- L
(act): ReLU(inplace=True): @: F8 X2 G5 Y5 h7 x( c4 _/ V& `1 y
) / _% v, v! q, w7 X& o/ i (1): GraphConvBR(4 H. v$ A* R) D4 W) i
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) $ Q4 L" k% o& P& K; ]/ q( A$ J (act): ReLU(inplace=True)9 e: z# V+ b& k2 l" y
) . {/ F9 [" Q5 K4 E! v& U6 {; i (2): GraphConvBR(7 F. }( q# e6 b8 ?8 d3 i
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)* y# w- y4 N4 E1 `! Z1 d- O* B
(act): ReLU(inplace=True) : U5 H( ]# R3 w ) ! |% M! J. o0 E! S. X+ W) D* Z )$ Q+ C* q" l C( C; r1 Y
(down): Sequential(& t+ u4 [/ H1 q* L+ v9 c3 E! i
(0): Conv2d(64, 48, kernel_size=(1, 1), stride=(1, 1)); V0 U- I, T0 c
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)! }3 u! F$ E# c4 j
)( d! S+ R4 c8 ] o# [( G5 M3 L, c+ R
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) ' j3 n: {1 N- s& Y0 X, J7 Y$ ]' o0 ` (soft): Softmax(dim=-2) . p$ J7 Y( D( w( e7 m& d$ A (relu): CELU(alpha=0.01)- x: O8 [) _0 ]; j! o4 _/ l6 N. V/ N
(expanding_conv): Conv2d(64, 432, kernel_size=(1, 1), stride=(1, 1), bias=False)" Y$ V6 j5 a+ \1 }; G2 e3 k$ M
(reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False) 2 I3 {" v6 H9 L- o* w% Z )1 j7 b4 G8 p( ?5 N
) 1 b c7 Z& A3 y) \. N& ~4 J8 t0 N (tcn): Sequential( # B* r* ~1 e9 w t O (0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)$ b" S5 W( j! j, }" h; B6 h2 r
(1): ReLU(inplace=True)0 O4 z. a8 `# `4 `+ {
(2): Conv2d(48, 48, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))1 i- A- i+ X9 U3 }- Z
(3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)8 {$ S1 `; d: F E
(4): Dropout(p=0, inplace=True)0 S6 N7 K1 X/ p, a; U
)8 A# y3 s1 Q6 _6 S) F
(residual): Sequential( 4 Q& c6 k( m) ] (0): Conv2d(64, 48, kernel_size=(1, 1), stride=(1, 1))) {/ {: M, H8 @8 n0 Q
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) . C6 P/ A! N$ {2 {9 D4 Y ) ; J) e) q& a5 g( { ) # S% @8 g* e) S! f/ y/ N1 I; w (4): Upsample(scale_factor=(2.0, 1.0), mode=bilinear) 2 y4 D6 u1 f ~. H4 g* { (5): ConvBlock( % B0 G: ?% e2 [. F: y2 p! u" f (act): ReLU(inplace=True) . t& g3 s; H( m9 a3 d (gcn): PyGeoConv( 6 Y9 z) o' T' u9 i% u (g_conv): SAGC(' I( L* x k v3 m: e
(conv_a): ModuleList( * C% q0 R. B! z+ @, s- @) ^3 C; J8 n (0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))/ S+ m6 M; b/ n7 \- [' Q5 o/ d
(1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))/ r4 O/ v/ J2 t* Z/ M8 m# u
(2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))' T' Z# T. m% D) K/ ^( P: m0 h8 V' u
). g5 z* d4 g" w+ b' H" h! }
(conv_b): ModuleList( V- v Y/ r3 [* |
(0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))' l5 {$ L5 R0 v8 r/ l' D
(1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))7 s) J9 k; v6 c' K
(2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))% j4 n9 X: t0 o2 p1 x- E0 T
) : N( k4 S( M" w( p4 o (gconv): ModuleList( " ^" o& j* u' }5 q% q. O" {" T (0): GraphConvBR( . m1 I# _1 Z8 l- a' k3 _ (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)/ E# r* F8 o- H, A
(act): ReLU(inplace=True)& A4 l! r: S$ i4 a V4 |
) # m$ c4 E! }1 c' P5 f7 K: f; X (1): GraphConvBR(- t3 R1 @8 o) I; w" z) z
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)0 f5 \1 V8 _& U: K' W. W
(act): ReLU(inplace=True)6 J+ A4 ?3 X4 v S% S% _3 }
) S3 `, g& x. ^1 u( N (2): GraphConvBR(: H0 b J* x: W4 f! @
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)' ]7 O, v* p& ~" }+ d* Z9 U% f
(act): ReLU(inplace=True)' ]7 p$ t% f" t/ | I
)! e v0 |- r4 {* l- ?
)% W W- v- r) ]% W* l* ~$ F& O
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)- P: ]! k+ f# p4 [6 |/ n
(soft): Softmax(dim=-2) . l! W2 }0 I0 D* R8 f) P8 V (relu): CELU(alpha=0.01)! ~3 d4 b) g+ d4 [8 z
(expanding_conv): Conv2d(48, 432, kernel_size=(1, 1), stride=(1, 1), bias=False)) B- W" b6 Z- Z) r+ {$ e8 k
(reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)- h5 \+ n9 e! L7 @9 `
) 9 K6 N: `* F! N% q ) 9 k5 i! o8 y$ N% {( p (tcn): Sequential(0 l2 [2 I9 H( Y) F7 `8 j
(0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 8 q- P6 F% \* c7 i (1): ReLU(inplace=True)3 O( j+ \. c, x8 m; j0 ^
(2): Conv2d(48, 48, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0)) 1 d6 ?- N: g( n& o) b! `8 m& ` (3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 5 S% h4 J- H: @2 Q (4): Dropout(p=0, inplace=True): A+ f6 s5 H* I# e! h* O+ S
)' U1 N4 B2 o3 R
) . j, G, L0 U# L* S (6): ConvBlock( 9 C. U: e- S9 V& `5 a* { (act): ReLU(inplace=True)" J/ T0 b' r; f
(gcn): PyGeoConv( & Q' j5 i4 W9 T: z2 j: q# a (g_conv): SAGC(2 I$ S2 D; R3 G, P0 b/ F& ]/ _0 ^
(conv_a): ModuleList(1 e+ j* o7 [; U8 d
(0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1)) & s( G# m" Q8 K+ n; c% Z$ i4 O (1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))! O6 q0 B4 H+ f$ U
(2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1)) + ]* h5 W$ g. b3 E# j8 T )* M" g! u8 h0 X/ r. x# S
(conv_b): ModuleList( 3 p5 [) f4 d! Z4 z6 R' I (0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1)); a0 `& D8 r, _3 T$ K
(1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))) r) {! P- L5 t7 N7 f
(2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1)): Q6 L" h4 U8 E* Y) V5 G6 a
) & u* F, z5 O: _% @2 q. a. R, n (gconv): ModuleList(7 j! S6 N" K' @* q4 T3 N% S
(0): GraphConvBR( " Q: c2 H3 u. I& M3 E (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)8 @) l9 u4 J% p W! N! u: d- v4 ~
(act): ReLU(inplace=True) 0 c1 c3 A: n4 c: [; [ ) 7 g$ i4 ?. g3 ?. L' |: I! ^. q# F- R# O (1): GraphConvBR(* |& Y; E$ k3 r
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) & I& Q5 c/ s8 ~' g (act): ReLU(inplace=True) & e" L5 Y3 J N/ }8 z& V* m8 [ ) , k, m- t- q8 g' Q' F6 w (2): GraphConvBR( - K1 d+ R% X( \ (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)! _& g! T0 P+ r. a" {
(act): ReLU(inplace=True), r6 u: A# l: ]6 O
)) h4 F# X- v( |0 m n+ y0 p& |
), u3 o1 v' R& F! V p& q. X! }
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)) P4 }% f/ s2 B# Y5 @1 ~
(soft): Softmax(dim=-2)/ K! [6 ]5 N7 G+ d% g _
(relu): CELU(alpha=0.01) # j$ \. @2 u) p E* ~9 @9 O (expanding_conv): Conv2d(48, 432, kernel_size=(1, 1), stride=(1, 1), bias=False)8 {' P; r6 S7 J1 f
(reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)6 R, y5 i& s5 Q; Q+ }
)8 M) R# B4 F# h, R
) 4 ~* H. a `& U9 |- K2 N! Y (tcn): Sequential($ y! P w0 }0 M C/ v7 d& `
(0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)) w. p" j. L. p% N& u
(1): ReLU(inplace=True) 4 \4 p. O$ S( e7 G6 U$ w2 p! L (2): Conv2d(48, 48, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))' \3 {! x. j( ~4 }' G
(3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)' W1 p! [7 s$ p
(4): Dropout(p=0, inplace=True)7 \/ h2 W& l, k' m6 d. `# ~- l9 |
)$ n. f4 {2 P# T1 ~% s' J7 I
) # l6 G# {8 @3 B w w ) - X& w0 j( ~; a* P# e) G ) ; p5 P: z% _/ A+ Y1 P)' H$ A5 C* n( x3 U
———————————————— & g$ E0 X" A1 w版权声明:本文为CSDN博主「FakeOccupational」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 . V" j' d3 T- Q a1 u# m2 r原文链接:https://blog.csdn.net/ResumeProject/article/details/126678496 7 k7 c3 j- U0 b4 E6 ] 2 C3 ~( x( |) ^. n G1 ? 3 }$ s( s; I! P