首页 AI Studio教育版 帖子详情
手把手深度学习_word2vec
收藏
快速回复
AI Studio教育版 问答课程答疑 1007 2
手把手深度学习_word2vec
收藏
快速回复
AI Studio教育版 问答课程答疑 1007 2

在<百度框架师手把手教深度学习>自然语言处理中的"词向量word2Vec"一课中.

定义SkipGram网络的时候

class SkipGram(fluid.dygraph.Layer):
    def __init__(self, vocab_size, embedding_size, init_scale=0.1):
        super(SkipGram, self).__init__()
        self.vocab_size = vocab_size
        self.embedding_size = embedding_size



        self.embedding = Embedding(
            size=[self.vocab_size, self.embedding_size],
            dtype='float32',
            param_attr=fluid.ParamAttr(
                name='embedding_para',
                initializer=fluid.initializer.UniformInitializer(
                    low=-0.5/embedding_size, high=0.5/embedding_size)))


        self.embedding_out = Embedding(
            size=[self.vocab_size, self.embedding_size],
            dtype='float32',
            param_attr=fluid.ParamAttr(
                name='embedding_out_para',
                initializer=fluid.initializer.UniformInitializer(
                    low=-0.5/embedding_size, high=0.5/embedding_size)))

同时也在前向计算中有

    def forward(self, center_words, target_words, label):
        center_words_emb = self.embedding(center_words)
        target_words_emb = self.embedding_out(target_words)

后面还有代码,但是我想要问的是,

forward()方法中    self.embedding(center_words)  是在SkipGram中定义的么?为什么会传入参数center_words,SkipGram中的embedding()好像没有参数的接收?

感谢阅读,并诚挚的希望收到您的回复

0
收藏
回复
全部评论(2)
时间顺序
沙印123
#2 回复于2020-06

您好,感谢您提出的问题。对于Class中的_init_()的方法定义了embedding和embedding_out两个函数,而在forward()的函数中调用了初始化的两个函数,因此SkipGram中的embedding就是接受到了center_words这个参数。如果有不太懂的地方可以查查关于python中class的定义方法。希望解决到您的问题。

0
回复
austinleaven
#3 回复于2020-07
您好,感谢您提出的问题。对于Class中的_init_()的方法定义了embedding和embedding_out两个函数,而在forward()的函数中调用了初始化的两个函数,因此SkipGram中的embedding就是接受到了center_words这个参数。如果有不太懂的地方可以查查关于python中class的定义方法。希望解决到您的问题。
展开

我知道,但是embedding和embedding_out两个方法,在设计之初就没有接收变量,在调用的时候反而传入变量,这样可以么?

0
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户