在tensorflow框架下,模型为GNN模型,要解决图着色(图论)问题,中间大致过程经过编码输入,RNN循环,聚合更新节点,颜色的嵌入,经固定次数嵌入更新,得到最后的节点和颜色的特征,输入MLP,进行预测任务:该图是否接受C中颜色着色?(二分类问题)
其中,负责聚合更新的RNN循环次数设为32时,loss在迭代过程会由很大的值(超过百万以上)逐渐变为lan,循环次数为8,最后loss由50左右经100epoch后会稳定在0.69和acc稳定在0.5左右是什么原因呢?
除此之外,我想在最后一层激活函数sigmoid之前加入BN层应该怎么编写呢,部分段代码如下:
......
# Get the last embeddings
last_states = gnn(
{ "M": M_matrix, "VC": VC_matrix, 'chrom_number': chrom_number },
{ "V": vertex_initial_embeddings, "C": colors_initial_embeddings },
time_steps = time_steps
)
GNN["last_states"] = last_states
V_n = last_states['V'].h
C_n = last_states['C'].h
# Compute a vote for each embedding
V_vote = tf.reshape(V_vote_MLP(V_n), [-1])
# Compute the number of problems in the batch
num_problems = tf.shape(n_vertices)[0]
# Compute a logit probability for each problem
pred_logits = tf.while_loop(
lambda i, pred_logits: tf.less(i, num_problems),
lambda i, pred_logits:
(
(i+1),
pred_logits.write(
i,
tf.reduce_mean(V_vote[tf.reduce_sum(n_vertices[0:i]):tf.reduce_sum(n_vertices[0:i])+n_vertices[i]])
)
),
[0, tf.TensorArray(size=num_problems, dtype=tf.float32)]
)[1].stack()
# Convert logits into probabilities
GNN['predictions'] = tf.sigmoid(pred_logits)
或者BN层应该加到其他什么地方呢,希望有详细代码指导?期望得到详细咨询指导,想具体了解代码的可以私信