Semi-Supervised 图卷积

简单的例子:

  1. https://towardsdatascience.com/how-to-do-deep-learning-on-graphs-with-graph-convolutional-networks-7d2250723780
  2. https://towardsdatascience.com/how-to-do-deep-learning-on-graphs-with-graph-convolutional-networks-62acf5b143d0
  3. 《Semi-Supervised Classification with Graph Convolutional Networks》论文解说:https://zhuanlan.zhihu.com/p/31067515
  • 《Semi-Supervised Classification with Graph Convolutional Networks》代码分析:
  1. 先定义了 Layer 层,主要作用是:对每层的name做了命名,还用一个参数决定是否做log
class Layer(object):

def __init__(self, **kwargs):
    allowed_kwargs = {'name', 'logging'}
    for kwarg in kwargs.keys():
        assert kwarg in allowed_kwargs, 'Invalid keyword argument: ' + kwarg
    name = kwargs.get('name')
    if not name:
        # return class name
        layer = self.__class__.__name__.lower()
        # 形成了一个新的类名 : trick
        name = layer + '_' + str(get_layer_uid(layer))
    self.name = name
    self.vars = {}
    # return False when get failed.
    logging = kwargs.get('logging', False)
    self.logging = logging
    self.sparse_inputs = False

    def _call(self, inputs):
    def __call__(self, inputs):
    def _log_vars(self):

__call__ 的作用让 Layer 的实例成为可调用对象;

  • 根据 Layer 继承得到denseNet考虑到的参数
  1. input_dim
  2. output_dim
  3. placehoders :作为计算图中的待填充数据都放在这里;在train.py定义为:
# Define placeholders
placeholders = {
    'support': [tf.sparse_placeholder(tf.float32) for _ in range(num_supports)],
    'features': tf.sparse_placeholder(tf.float32, shape=tf.constant(features[2], dtype=tf.int64)),
    'labels': tf.placeholder(tf.float32, shape=(None, y_train.shape[1])),
    'labels_mask': tf.placeholder(tf.int32),
    'dropout': tf.placeholder_with_default(0., shape=()),
    'num_features_nonzero': tf.placeholder(tf.int32)  # helper variable for sparse dropout
}
  1. dropout
  2. sparse_inputs :是否是稀疏数据
  3. act : 激活函数
  4. bias:是否有偏置
  5. featureless:输入的数据带不带特征矩阵
  6. **kwargs:基类中的参数,name还有logging。
class Dense(Layer):
    """Dense layer."""
   
    def __init__(self, input_dim, output_dim, placeholders, dropout=0., sparse_inputs=False,
                 act=tf.nn.relu, bias=False, featureless=False, **kwargs):
        super(Dense, self).__init__(**kwargs)

        if dropout:
            self.dropout = placeholders['dropout']
        else:
            self.dropout = 0.

        self.act = act
        self.sparse_inputs = sparse_inputs
        self.featureless = featureless
        self.bias = bias

        # helper variable for sparse dropout
        self.num_features_nonzero = placeholders['num_features_nonzero']

        with tf.variable_scope(self.name + '_vars'):
            self.vars['weights'] = glorot([input_dim, output_dim],
                                          name='weights')
            if self.bias:
                self.vars['bias'] = zeros([output_dim], name='bias')

        if self.logging:
            self._log_vars()

    def _call(self, inputs):
        x = inputs

        # dropout
        if self.sparse_inputs:
            x = sparse_dropout(x, 1-self.dropout, self.num_features_nonzero)
        else:
            x = tf.nn.dropout(x, 1-self.dropout)

        # transform
        output = dot(x, self.vars['weights'], sparse=self.sparse_inputs)

        # bias
        if self.bias:
            output += self.vars['bias']

        retur
  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值