繁体   English   中英

如何在反向传播之外转换 keras NN 的输出?

[英]How do you transform the output of keras NN outside backpropagation?

我在 NN 的一侧有原始 1d 数据,另一侧有 1d 标签。 输入数据通过具有可训练参数和特定激活函数的层进行转换。 我想使用我不想训练的外部算法添加最终转换(仅训练前几层中的参数)。 我怎样才能做到这一点?

更新:在使用子进程实现外部算法之前,我尝试使用一个简单的测试来输出一个常量(1.0)。 这是代码:

inputs=keras.Input(shape=(174,1))
labels=padded_label
x = keras.layers.Conv1D(filters=4,kernel_size=8,strides=1,input_shape=(174,1),padding='same')(inputs)
x = keras.layers.Dense(1, activation='sigmoid')(x)
def grande(x):
    return np.ones((x.shape))
predictions=keras.layers.Lambda(grande,trainable=False)(x)
model = keras.Model(inputs=inputs, outputs=predictions)
model.compile(optimizer='rmsprop',
          loss='binary_crossentropy',
          metrics=['accuracy'])

其中标签是形状为 (174,1) 的向量,值为 0 或 1。这不起作用并引发错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-35-b23e29737fa2> in <module>()
      8     #return sp.check_output('echo 1.0',shell=True)
      9     return np.ones((x.shape))
---> 10 predictions=keras.layers.Lambda(grande,trainable=False)(x)
     11 model = keras.Model(inputs=inputs, outputs=predictions)
     12 model.compile(optimizer='rmsprop',

/usr/local/lib/python3.5/dist-packages/tensorflow/python/keras/engine    /base_layer.py in __call__(self, inputs, *args, **kwargs)
    701 
    702       if not in_deferred_mode:
--> 703         outputs = self.call(inputs, *args, **kwargs)
    704         if outputs is None:
    705           raise ValueError('A layer\'s `call` method should return     a Tensor '

/usr/local/lib/python3.5/dist-packages/tensorflow/python/keras/layers/core.py in call(self, inputs, mask)
    707     if generic_utils.has_arg(self.function, 'mask'):
    708       arguments['mask'] = mask
--> 709     return self.function(inputs, **arguments)
    710 
    711   def compute_mask(self, inputs, mask=None):

<ipython-input-35-b23e29737fa2> in grande(x)
      7     print(x)
      8     #return sp.check_output('echo 1.0',shell=True)
----> 9     return np.ones((x.shape))
     10 predictions=keras.layers.Lambda(grande,trainable=False)(x)
     11 model = keras.Model(inputs=inputs, outputs=predictions)

/usr/local/lib/python3.5/dist-packages/numpy/core/numeric.py in ones(shape, dtype, order)
    201 
    202     """
--> 203     a = empty(shape, dtype, order)
    204     multiarray.copyto(a, 1, casting='unsafe')
    205     return a

TypeError: __index__ returned non-int (type NoneType)

如何为输出提供正确的形状?

检查Lambda层(链接),它可用于创建自定义转换,而无需添加任何新的可训练权重。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM