AttributeError: ‘int‘ object has no attribute ‘value‘

运行atten_head函数时,报错“AttributeError: ‘int’ object has no attribute ‘value’”

def attn_head(seq, out_sz, bias_mat, activation, in_drop=0.0, coef_drop=0.0, residual=False):
  # seq 指的是输入的节点特征矩阵,大小为 [num_graph, num_node, fea_size]
  # out_szie指的是变换后的节点特征维度
  # bias_mat 是经过变换后的邻接矩阵,大小为 [num_node, num_node]。
  with tf.name_scope('my_attn'):
    if in_drop != 0.0:
       seq = tf.nn.dropout(seq, 1.0 - in_drop)  
    seq_fts = seq
    latent_factor_size = 8

    # 初始化权重
    w_1 = glorot(seq_fts.shape[2].value,latent_factor_size)
    w_2 = glorot([2 * seq_fts.shape[2].value, latent_factor_size])

    # 最简单的自我关注
    f_1 = tf.keras.layers.Conv1D(seq_fts, 1, 1)
    f_2 = tf.keras.layers.Conv1D(seq_fts, 1, 1)
    logits = f_1 + tf.transpose(f_2, [0, 2, 1])

    #但是,这里为什么会多一项 bias_mat 呢?
    #因为的 logits 存储了任意两个节点之间的注意力值,但是,归一化只需要对每个节点的所有邻居的注意力进行(k属于Ni)。
    # 所以,引入了 bias_mat 就是将 softmax 的归一化对象约束在每个节点的邻居上,如下式的红色部分。
    # 将bias_mat和注意力矩阵相加,即(tf.nn.leaky_relu(logits) + bias_mat), 进而将非节点邻居进行mask。
    coefs = tf.nn.softmax(tf.nn.leaky_relu(logits[0]) + bias_mat[0])
    
    if coef_drop != 0.0:
       coefs = tf.nn.dropout(coefs, 1.0 - coef_drop)
    if in_drop != 0.0:
       seq_fts = tf.nn.dropout(seq_fts, 1.0 - in_drop)

    #将 mask 之后的注意力矩阵 coefs 与变换后的特征矩阵 seq_fts 相乘,即可得到更新后的节点表示 vals。
    neigh_embs = tf.matmul(coefs, seq_fts[0])

    #tf.add() 将参数相加
    neigh_embs_aggre_1 = tf.matmul(tf.add(seq_fts[0],neigh_embs),w_1)
    # tf.matmul()将矩阵a乘以矩阵b,生成a * b。
    neigh_embs_aggre_2 = tf.matmul(tf.concat([seq_fts[0],neigh_embs],axis=-1),w_2)
    # 激活
    final_embs = activation(neigh_embs_aggre_1) + activation(neigh_embs_aggre_2)
    
    return final_embs, coefs

有大神知道怎么解决么?在网上找了一圈也没找到办法 哭了

你可能感兴趣的:(python)