【发布时间】:2017-07-14 11:38:10
【问题描述】:
我正在尝试实现 ResNet 模型。我想使用一个函数来生成“基础”层(将 conv-relu-conv-relu 添加到未修改的输入中),以便我可以以编程方式快速增加层。但是,当我将图层作为函数参数传递给函数时,它说它不是 keras 张量。第一部分是我的函数定义,第二部分是调用,其中 x_in 是层对象,y 是残差块的输出。我使用“x”作为上一层和下一层的名称。
def ResBlock(x_in, n_filt, l_filt, pool):
...
return y
x = ResBlock(x, 32, 16, 0)
在谷歌上搜索后,我发现这是正确的语法:
def ResBlock(n_filt, l_filt, pool):
def unit(x_in):
x = Conv1D(n_filt, l_filt, padding='same')(x_in)
x = BatchNormalization()(x)
x = relu(x)
x = Dropout(0.1)(x)
x = Conv1D(n_filt, l_filt, padding='same')(x)
if pool:
x = MaxPooling1D()(x)
x_in = MaxPooling1D()(x_in)
y = keras.layers.add([x, x_in])
return y
return unit
x = ResBlock(32, 16, 0)(x)
谁能解释为什么这是正确的方法?具体来说,我想知道为什么我们需要 layer 对象的嵌套 def?
【问题讨论】:
-
没有您的原始代码可以比较,这个问题无法回答。你需要更具体。
-
我试图让函数调用清晰。我的问题是为什么我们需要 layer 对象的嵌套 def?
-
显示你的版本代码。
-
感谢@circuitdesigner5172 的澄清,我给了你答案。
标签: python machine-learning keras