首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构造神经网络的三层深中频树

构造神经网络的三层深中频树
EN

Code Review用户
提问于 2016-01-17 02:34:00
回答 1查看 171关注 0票数 3

下面的代码片段根据提供的选项构造不同类型的神经网络输出。目前,我的代码中有一个很大的注释,它描述了所有选项应该做什么。我想学习如何使这段代码不那么复杂,或者把它的复杂性分解成更简单的部分。有什么建议吗?

代码语言:javascript
复制
#------------------------------------------------------------#
# NOTE: Meaning of all the options.                          #
# stagger_schedule=extended: We copy input vec to output.    #
# stagger_schedule=external: We dont copy input to output.   #
# -----------------------------------------------------------#
# do_backward_pass: We use the output of the backward LSTM   #
#   Default:True.                                            #
# -----------------------------------------------------------#
# chop_bilstm: Should we chop the first and last vectors from#
# the sequence. Default:False                                #
#------------------------------------------------------------#
# extended_multiplicative: Multiply the forward and back LSTM#
#    and concatenate the input embedding.                    #
# external_multiplicative: Multiply the forward and back LSTM#
#    and but dont concatenate the input embedding.           #
#------------------------------------------------------------#
if (self.prm('stagger_schedule') == 'extended'):
    if self.prm('chop_bilstm'):
        if self.prm('do_backward_pass'):
            self.output_tv = T.concatenate(
                [forward, backward, input_tv], axis=1)[1:-1]
            pass
        else:
            self.output_tv = T.concatenate(
                [forward, input_tv], axis=1)[1:-1]
            pass
        pass
    else:
        if self.prm('do_backward_pass'):
            self.output_tv = T.concatenate(
                [forward, backward, input_tv], axis=1)
            pass
        else:
            self.output_tv = T.concatenate(
                [forward, input_tv], axis=1)
            pass
        pass
    pass
elif self.prm('stagger_schedule') == 'external':
    if self.prm('chop_bilstm'):
        if self.prm('do_backward_pass'):
            self.output_tv = T.concatenate(
                [forward[1:-1], backward[2:]], axis=1)
            pass
        else:
            self.output_tv = forward[1:-1]
            pass
        pass
    else:
        if self.prm('do_backward_pass'):
            self.output_tv = T.concatenate(
                [forward, backward], axis=1)
            pass
        else:
            self.output_tv = forward
            pass
        pass
    pass
elif self.prm('stagger_schedule') == 'extended_multiplicative':
    if self.prm('chop_bilstm') or (not self.prm('do_backward_pass')):
        raise NotImplementedError()
    self.output_tv = T.concatenate(
        [forward * backward, input_tv], axis=1)
    pass
elif self.prm('stagger_schedule') == 'external_multiplicative':
    if self.prm('chop_bilstm') or (not self.prm('do_backward_pass')):
        raise NotImplementedError()
    self.output_tv = forward * backward
    pass
else:
    raise NotImplementedError()
EN

回答 1

Code Review用户

发布于 2016-01-17 15:02:27

下面是一些整理这些代码的方法:

  • 添加一些评论。我很难判断这段代码是否正确,或者我是否通过重构引入了一个bug,因为我不知道这段代码应该做什么。
  • 去掉不必要的pass语句。pass语句字面上是一事无成,除了为未编写的代码提供占位符之外。如果您将它们全部删除,您将节省许多行,并能够在屏幕上安装更多的代码。
  • extended分支下,除了删除self.output_tv的第一个和最后一个字符外,代码几乎是相同的。如果我们推迟到最后,我们可以有一组分支如下: If (self.prm('stagger_schedule') == 'extended'):if self.prm('do_backward_pass'):self.output_tv = T.concatenate(向前,向后,输入_电视,axis=1) of : self.output_tv = T.concatenate(前进,输入_电视,( axis=1)如果self.prm('chop_bilstm'):self.output_tv = self.output_tv1:-1 22行减少到7行,而这仅仅是2层深。
  • external分支中的代码也可以进行类似的合并:您可以在两个子分支中执行相同的效果,但是使用略为截断的forwardbackward变量。这里有另一个版本: elif self.prm('stagger_schedule') == 'external':if self.prm('chop_bilstm'):forward = forward1:-1 deep =反向2: if self.prm('do_backward_pass'):self.output_tv =T.concatenate([前进,向后,axis=1) ) is : self.output_tv =前进20行,减少到8行,这只有2个层次深。
  • 您可以考虑将每个分支包装到它自己的方法中,并将其调用到其中。例如,例如: if (self.prm('stagger_schedule') == 'extended'):self._set_output_tv_extended(前进,向后,input_tv) elif self.prm('stagger_schedule') == 'external':self._set_output_tv_external(前进,向后,input_tv) elif self.prm('stagger_schedule') ==‘extended’:向后扩展,self._set_output_tv_external_multiplicative(forward,self.prm('stagger_schedule') ==‘external’:==向后,input_tv) method : raise (),它为您节省了一个即时的嵌套级别,并将每个分支的特定逻辑从该方法中推开。
票数 3
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/117028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档