【问题标题】:How is Theano based ElemwiseSumLayer of Lasagne converted in Keras如何在 Keras 中转换基于 Theano 的 ElemwiseSumLayer of Lasagne
【发布时间】:2018-07-03 05:35:01
【问题描述】:

我有一个内置于 Theano 的网络。我正在尝试将其转换为 Keras。

net['voxres2_out'] = ElemwiseSumLayer([net['conv1c'], net['voxres2_conv2']])

现在,我想将 Theano 中的此语句转换为 Keras。但是,我不确定哪个层可以替代 Keras 中的相同功能。最初,我认为 Concatenate 是一种选择,但我不确定。

以下是theano中的原代码

net = {}
net['input'] = InputLayer((None, 1, 110, 110, 110), input_var=input_var)
net['conv1a'] = Conv3DDNNLayer(net['input'], 32, 3, pad='same',
                               nonlinearity=identity)
net['bn1a'] = BatchNormLayer(net['conv1a'])
net['relu1a'] = NonlinearityLayer(net['bn1a'])
net['conv1b'] = Conv3DDNNLayer(net['relu1a'], 32, 3, pad='same',
                               nonlinearity=identity)
net['bn1b'] = BatchNormLayer(net['conv1b'])
net['relu1b'] = NonlinearityLayer(net['bn1b'])
net['conv1c'] = Conv3DDNNLayer(net['relu1b'], 64, 3, stride=(2, 2, 2),
                               pad='same', nonlinearity=identity)
# VoxRes block 2
net['voxres2_bn1'] = BatchNormLayer(net['conv1c'])
net['voxres2_relu1'] = NonlinearityLayer(net['voxres2_bn1'])
net['voxres2_conv1'] = Conv3DDNNLayer(net['voxres2_relu1'], 64, 3,
                                      pad='same', nonlinearity=identity)
net['voxres2_bn2'] = BatchNormLayer(net['voxres2_conv1'])
net['voxres2_relu2'] = NonlinearityLayer(net['voxres2_bn2'])
net['voxres2_conv2'] = Conv3DDNNLayer(net['voxres2_relu2'], 64, 3,
                                      pad='same', nonlinearity=identity)
net['voxres2_out'] = ElemwiseSumLayer([net['conv1c'],
                                       net['voxres2_conv2']])
# VoxRes block 3
net['voxres3_bn1'] = BatchNormLayer(net['voxres2_out'])

以下是我对 Keras 的转换

classifier = Sequential()
classifier.add(Conv3D(32, (3, 3, 3), input_shape = (128, 128, 128, 1), padding = 'same', activation = 'relu'))
classifier.add(BatchNormalization())
classifier.add(Activation('relu'))

classifier.add(Conv3D(32, (3, 3, 3), input_shape = (128, 128, 128, 1), padding = 'same', activation = 'relu'))
classifier.add(BatchNormalization())
classifier.add(Activation('relu'))
classifier.add(Conv3D(64, (3, 3, 3), input_shape = (128, 128, 128, 1), padding = 'same', activation = 'relu',  strides = (2, 2, 2)))

classifier_1 = Sequential()#comment
classifier_1 = classifier
classifier_1.add(BatchNormalization())
classifier_1.add(Activation('relu'))
classifier_1.add(Conv3D(64, (3, 3, 3), input_shape = (128, 128, 128, 1), padding = 'same', activation = 'relu'))
classier_added_1 = Add()([classifier.output, classifier_1.output])

classifier_2 = Sequential()
classifier_2 = classier_added_1
classifier_2.add(BatchNormalization())
classifier_2.add(Activation('relu'))
classifier_2.add(Conv3D(64, (3, 3, 3), padding = 'same', activation = 'relu'))

所以我使用了 Keras 的 Add 功能部分。但是,它返回一个张量,并且在使用返回的张量执行与分类器_2 关联的语句时,我收到以下错误。

AttributeError: 'Tensor' object has no attribute 'add'

我了解错误,但我不知道解决方法。

你能帮忙吗?

【问题讨论】:

  • 我认为 K.add() 只是元素

标签: neural-network keras theano lasagne


【解决方案1】:

为了解决这个问题,我独立搭建了模型,并在那里进行张量加法工作。

classifier_added_2 = Add()([classifier_2, classifier_3])

其中classifier_2和classifier_3是输入张量,classifier_added_2是输出张量。

现在,可以使用 Keras 中的 Model 函数构建这些张量

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 2019-09-15
    • 1970-01-01
    相关资源
    最近更新 更多