m0_53782829 2023-04-20 16:43 采纳率: 50%
浏览 57
已结题

GNN解决图着色问题

在tensorflow框架下,模型为GNN模型,要解决图着色(图论)问题,中间大致过程经过编码输入,RNN循环,聚合更新节点,颜色的嵌入,经固定次数嵌入更新,得到最后的节点和颜色的特征,输入MLP,进行预测任务:该图是否接受C中颜色着色?(二分类问题)
我想在最后一层激活函数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])
    # Add Batch Normalization layer before activation function
    V_vote = tf.keras.layers.BatchNormalization()(V_vote)

    # Compute the number of problems in the batch
    num_problems = tf.shape(n_vertices)[0]
    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()

    # Add sigmoid activation function
    pred_logits = tf.keras.activations.sigmoid(pred_logits)

    # Assign predictions to dictionary
    GNN['predictions'] = pred_logits

出现了如下报错:ValueError: ('Input has undefined axis dimension. Input shape: ', TensorShape([None]))
我应该怎么修改代码呢?
同时我想在如下代码添加梯度裁剪该怎么添加呢?

 # Define loss
    GNN['loss'] = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=cn_exists, logits=pred_logits))

    # Define optimizer
    optimizer = tf.train.AdamOptimizer(name='Adam', learning_rate=learning_rate)

    # Compute cost relative to L2 normalization
    vars_cost = tf.add_n([ tf.nn.l2_loss(var) for var in tf.trainable_variables() ])

    # Define gradients and train step
    grads, _ = tf.clip_by_global_norm(tf.gradients(GNN['loss'] + tf.multiply(vars_cost, l2norm_scaling),tf.trainable_variables()),global_norm_gradient_clipping_ratio)
    GNN['train_step'] = optimizer.apply_gradients(zip(grads, tf.trainable_variables()))
    
    GNN['C_n'] = C_n

  • 写回答

5条回答 默认 最新

  • 晨埃LUO定 2023-04-20 16:50
    关注

    要在这段代码中添加梯度裁剪,您需要将 grads 张量传递到 tf.clip_by_global_norm() 函数中,并使用 global_norm_gradient_clipping_ratio 参数指定裁剪比率,例如:

    
    ```python
    # Define gradients and train step with gradient clipping
    grads, _ = tf.clip_by_global_norm(
        tf.gradients(
            GNN['loss'] + tf.multiply(vars_cost, l2norm_scaling),
            tf.trainable_variables()
        ),
        global_norm_gradient_clipping_ratio
    )
    GNN['train_step'] = optimizer.apply_gradients(zip(grads, tf.trainable_variables()))
    
    
    

    ```

    评论

报告相同问题?

问题事件

  • 系统已结题 4月28日
  • 创建了问题 4月20日

悬赏问题

  • ¥20 需要帮我远程操控一下,运行一下我的那个代码,我觉得我无能为力了
  • ¥20 有偿:在ubuntu上安装arduino以及其常用库文件。
  • ¥15 请问用arcgis处理一些数据和图形,通常里面有一个根据点划泰森多边形的命令,直接划的弊端是只能执行一个完整的边界,但是我们有时候会用到需要在有很多边界内利用点来执行划泰森多边形的命令
  • ¥30 在wave2foam中执行setWaveField时遇到了如下的浮点异常问题,请问该如何解决呢?
  • ¥750 关于一道数论方面的问题,求解答!(关键词-数学方法)
  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?