如果在自定义不可训练角膜层内,则>> [

问题描述 投票:0回答:1
我有一个定制的Keras层,我想从特定的输入返回特定的输出。我不希望它是可训练的。

该层应执行以下操作

if input = [1,0] then output = 1 if input = [0,1] then output = 0

相反,它总是输出-1,如果有问题,我将设置该值。

我认为行不如预期的是:

if(test_mask_1_result_count == 2)

这是自定义层:

class my_custom_layer(layers.Layer): def __init__(self, **kwargs): super(my_custom_layer, self).__init__(**kwargs) def call(self, inputs,training=None): def encode(): # set up the test mask: test_mask_1 = np.array([0,1],dtype=np.int32) k_test_mask_1 = backend.variable(value=test_mask_1) # test if the input is equal to the test mask test_mask_1_result = backend.equal(inputs,k_test_mask_1) # add up all the trues test_mask_1_result_count = tf.reduce_sum(tf.cast(test_mask_1_result, tf.int32)) # return if we've found the right mask if(test_mask_1_result_count == 2): res = np.array([0]).reshape((1,)) #top left k_res = backend.variable(value=res) return k_res # set up to test the second mask test_mask_2 = np.array([1,0],dtype=np.int32) k_test_mask_2 = backend.variable(value=test_mask_2) # test if the input is equal to the test mask test_mask_2_result = backend.equal(inputs,k_test_mask_2) # add up all the trues test_mask_2_result_count = tf.reduce_sum(tf.cast(test_mask_2_result, tf.int32)) # return if we've found the right mask if(test_mask_2_result_count == 2): res = np.array([1]).reshape((1,)) #top left k_res = backend.variable(value=res) return k_res # if we've got here we're in trouble: res = np.array([-1]).reshape((1,)) #top left k_res = backend.variable(value=res) return k_res return encode() def compute_output_shape(self, input_shape): return (input_shape[0],1)

为什么if不会触发?

我还使用网络外部的keras制作了MWE。这似乎按预期工作:

mask_1 = np.array([1,0],dtype=np.int32) k_mask_1 = backend.variable(value=mask_1) input_1 = np.array([1,0],dtype=np.int32) k_input_1 = backend.variable(value=input_1) mask_eq = backend.equal(k_input_1,k_mask_1) mask_eq_sum = tf.reduce_sum(tf.cast(mask_eq, tf.int32)) # keras backend sess = backend.get_session() print(sess.run(mask_eq_sum))

输出2

我怀疑有一些我不了解的基本知识。

我有一个定制的Keras层,我想从特定的输入返回特定的输出。我不希望它是可训练的。如果输入= [1,0],则该层应执行以下操作;如果输入= ...

keras deep-learning keras-layer
1个回答
0
投票
我不确定您的代码出了什么问题,但是您的图层似乎比所需的要复杂得多。例如,>

my_custom_layer = layers.Lambda(lambda x: x[0])

© www.soinside.com 2019 - 2024. All rights reserved.