算法:

# F: 特征提取器

# G:特征域适应器

# N:独立同分布的高斯噪声

# D:分类器

pretrain_init(F)

random_init(G, D)

for x in data_loader:

o = F(x) # 提取正常特征

q = G(o) # 域适应

q_1 = q + random(N_1) #缺陷特征

q_2 = q + random(N_2) #合成正常特征

loss = loss_func(D(q), D(q_1), D(q_2)).mean()

loss.backward() # 反向传播

F = F.detach() # F不更新参数

update(G, D) #使用 Adam更新

# loss function

def loss_func(s, s_1, s_2):

th+ = -th = 0.5, α=1

return max(0,th-s) + max(0,th_+s_1)+max(0,α-( s- s_1))+| s_1-s_2|