![](/img/trans.png)
[英]How to use output of Neural Network as input for another NN in Keras
[英]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.