2016-12-09 13 views
1

L2正規化ベクトルを出力するTensorflowバックエンド付きKerasを使用してニューラルネットを構築したいと思います。私は、次のことを試してみましたが、何らかの理由でそれが出力をnotlamizeしません:ケラス付きL2正規化出力

import keras.backend as K 
input = Input(shape=input_shape) 
... 
dense7 = Dense(output_dim=3)(flatten6) 
l2_norm = Lambda(lambda x: K.l2_normalize(x,axis=1))(dense7) 
return Model(input=input, output=l2_norm) 

は、だからここの出力は、3次元ベクトルであり、私はこのベクトルの長さが1であることを確認したいと思います誰が助けることができます私は出る?また、なぜ私のソリューションが失敗するのか教えていただけますか?

例:

output: [ 8.27677908e-08 2.64180613e-07 -2.81542953e-07] 
required: [ 0.20961709 0.6690619 -0.71303362] 

モデルの要約:

____________________________________________________________________________________________________ 
Layer (type)      Output Shape   Param #  Connected to      
==================================================================================================== 
input_1 (InputLayer)    (None, 224, 224, 3) 0            
____________________________________________________________________________________________________ 
convolution2d_1 (Convolution2D) (None, 112, 112, 64) 9472  input_1[0][0]      
____________________________________________________________________________________________________ 
batchnormalization_1 (BatchNormal(None, 112, 112, 64) 128   convolution2d_1[0][0]    
____________________________________________________________________________________________________ 
maxpooling2d_1 (MaxPooling2D) (None, 56, 56, 64) 0   batchnormalization_1[0][0]  
____________________________________________________________________________________________________ 
convolution2d_2 (Convolution2D) (None, 56, 56, 64) 4160  maxpooling2d_1[0][0]    
____________________________________________________________________________________________________ 
batchnormalization_2 (BatchNormal(None, 56, 56, 64) 128   convolution2d_2[0][0]    
____________________________________________________________________________________________________ 
convolution2d_3 (Convolution2D) (None, 56, 56, 192) 110784  batchnormalization_2[0][0]  
____________________________________________________________________________________________________ 
batchnormalization_3 (BatchNormal(None, 56, 56, 192) 384   convolution2d_3[0][0]    
____________________________________________________________________________________________________ 
maxpooling2d_2 (MaxPooling2D) (None, 28, 28, 192) 0   batchnormalization_3[0][0]  
____________________________________________________________________________________________________ 
convolution2d_5 (Convolution2D) (None, 28, 28, 96) 18528  maxpooling2d_2[0][0]    
____________________________________________________________________________________________________ 
convolution2d_7 (Convolution2D) (None, 28, 28, 16) 3088  maxpooling2d_2[0][0]    
____________________________________________________________________________________________________ 
maxpooling2d_3 (MaxPooling2D) (None, 28, 28, 192) 0   maxpooling2d_2[0][0]    
____________________________________________________________________________________________________ 
convolution2d_4 (Convolution2D) (None, 28, 28, 64) 12352  maxpooling2d_2[0][0]    
____________________________________________________________________________________________________ 
convolution2d_6 (Convolution2D) (None, 28, 28, 128) 110720  convolution2d_5[0][0]    
____________________________________________________________________________________________________ 
convolution2d_8 (Convolution2D) (None, 28, 28, 32) 12832  convolution2d_7[0][0]    
____________________________________________________________________________________________________ 
convolution2d_9 (Convolution2D) (None, 28, 28, 32) 6176  maxpooling2d_3[0][0]    
____________________________________________________________________________________________________ 
merge_1 (Merge)     (None, 28, 28, 256) 0   convolution2d_4[0][0]    
                    convolution2d_6[0][0]    
                    convolution2d_8[0][0]    
                    convolution2d_9[0][0]    
____________________________________________________________________________________________________ 
convolution2d_11 (Convolution2D) (None, 28, 28, 96) 24672  merge_1[0][0]      
____________________________________________________________________________________________________ 
convolution2d_13 (Convolution2D) (None, 28, 28, 32) 8224  merge_1[0][0]      
____________________________________________________________________________________________________ 
maxpooling2d_4 (MaxPooling2D) (None, 28, 28, 256) 0   merge_1[0][0]      
____________________________________________________________________________________________________ 
convolution2d_10 (Convolution2D) (None, 28, 28, 64) 16448  merge_1[0][0]      
____________________________________________________________________________________________________ 
convolution2d_12 (Convolution2D) (None, 28, 28, 128) 110720  convolution2d_11[0][0]   
____________________________________________________________________________________________________ 
convolution2d_14 (Convolution2D) (None, 28, 28, 64) 51264  convolution2d_13[0][0]   
____________________________________________________________________________________________________ 
convolution2d_15 (Convolution2D) (None, 28, 28, 64) 16448  maxpooling2d_4[0][0]    
____________________________________________________________________________________________________ 
merge_2 (Merge)     (None, 28, 28, 320) 0   convolution2d_10[0][0]   
                    convolution2d_12[0][0]   
                    convolution2d_14[0][0]   
                    convolution2d_15[0][0]   
____________________________________________________________________________________________________ 
convolution2d_16 (Convolution2D) (None, 28, 28, 128) 41088  merge_2[0][0]      
____________________________________________________________________________________________________ 
convolution2d_18 (Convolution2D) (None, 28, 28, 32) 10272  merge_2[0][0]      
____________________________________________________________________________________________________ 
convolution2d_17 (Convolution2D) (None, 14, 14, 256) 295168  convolution2d_16[0][0]   
____________________________________________________________________________________________________ 
convolution2d_19 (Convolution2D) (None, 14, 14, 64) 51264  convolution2d_18[0][0]   
____________________________________________________________________________________________________ 
maxpooling2d_5 (MaxPooling2D) (None, 14, 14, 320) 0   merge_2[0][0]      
____________________________________________________________________________________________________ 
merge_3 (Merge)     (None, 14, 14, 640) 0   convolution2d_17[0][0]   
                    convolution2d_19[0][0]   
                    maxpooling2d_5[0][0]    
____________________________________________________________________________________________________ 
convolution2d_21 (Convolution2D) (None, 14, 14, 96) 61536  merge_3[0][0]      
____________________________________________________________________________________________________ 
convolution2d_23 (Convolution2D) (None, 14, 14, 32) 20512  merge_3[0][0]      
____________________________________________________________________________________________________ 
maxpooling2d_6 (MaxPooling2D) (None, 14, 14, 640) 0   merge_3[0][0]      
____________________________________________________________________________________________________ 
convolution2d_20 (Convolution2D) (None, 14, 14, 256) 164096  merge_3[0][0]      
____________________________________________________________________________________________________ 
convolution2d_22 (Convolution2D) (None, 14, 14, 192) 166080  convolution2d_21[0][0]   
____________________________________________________________________________________________________ 
convolution2d_24 (Convolution2D) (None, 14, 14, 64) 51264  convolution2d_23[0][0]   
____________________________________________________________________________________________________ 
convolution2d_25 (Convolution2D) (None, 14, 14, 128) 82048  maxpooling2d_6[0][0]    
____________________________________________________________________________________________________ 
merge_4 (Merge)     (None, 14, 14, 640) 0   convolution2d_20[0][0]   
                    convolution2d_22[0][0]   
                    convolution2d_24[0][0]   
                    convolution2d_25[0][0]   
____________________________________________________________________________________________________ 
convolution2d_27 (Convolution2D) (None, 14, 14, 112) 71792  merge_4[0][0]      
____________________________________________________________________________________________________ 
convolution2d_29 (Convolution2D) (None, 14, 14, 32) 20512  merge_4[0][0]      
____________________________________________________________________________________________________ 
maxpooling2d_7 (MaxPooling2D) (None, 14, 14, 640) 0   merge_4[0][0]      
____________________________________________________________________________________________________ 
convolution2d_26 (Convolution2D) (None, 14, 14, 224) 143584  merge_4[0][0]      
____________________________________________________________________________________________________ 
convolution2d_28 (Convolution2D) (None, 14, 14, 224) 226016  convolution2d_27[0][0]   
____________________________________________________________________________________________________ 
convolution2d_30 (Convolution2D) (None, 14, 14, 64) 51264  convolution2d_29[0][0]   
____________________________________________________________________________________________________ 
convolution2d_31 (Convolution2D) (None, 14, 14, 128) 82048  maxpooling2d_7[0][0]    
____________________________________________________________________________________________________ 
merge_5 (Merge)     (None, 14, 14, 640) 0   convolution2d_26[0][0]   
                    convolution2d_28[0][0]   
                    convolution2d_30[0][0]   
                    convolution2d_31[0][0]   
____________________________________________________________________________________________________ 
convolution2d_33 (Convolution2D) (None, 14, 14, 128) 82048  merge_5[0][0]      
____________________________________________________________________________________________________ 
convolution2d_35 (Convolution2D) (None, 14, 14, 32) 20512  merge_5[0][0]      
____________________________________________________________________________________________________ 
maxpooling2d_8 (MaxPooling2D) (None, 14, 14, 640) 0   merge_5[0][0]      
____________________________________________________________________________________________________ 
convolution2d_32 (Convolution2D) (None, 14, 14, 192) 123072  merge_5[0][0]      
____________________________________________________________________________________________________ 
convolution2d_34 (Convolution2D) (None, 14, 14, 256) 295168  convolution2d_33[0][0]   
____________________________________________________________________________________________________ 
convolution2d_36 (Convolution2D) (None, 14, 14, 64) 51264  convolution2d_35[0][0]   
____________________________________________________________________________________________________ 
convolution2d_37 (Convolution2D) (None, 14, 14, 128) 82048  maxpooling2d_8[0][0]    
____________________________________________________________________________________________________ 
merge_6 (Merge)     (None, 14, 14, 640) 0   convolution2d_32[0][0]   
                    convolution2d_34[0][0]   
                    convolution2d_36[0][0]   
                    convolution2d_37[0][0]   
____________________________________________________________________________________________________ 
convolution2d_39 (Convolution2D) (None, 14, 14, 144) 92304  merge_6[0][0]      
____________________________________________________________________________________________________ 
convolution2d_41 (Convolution2D) (None, 14, 14, 32) 20512  merge_6[0][0]      
____________________________________________________________________________________________________ 
maxpooling2d_9 (MaxPooling2D) (None, 14, 14, 640) 0   merge_6[0][0]      
____________________________________________________________________________________________________ 
convolution2d_38 (Convolution2D) (None, 14, 14, 160) 102560  merge_6[0][0]      
____________________________________________________________________________________________________ 
convolution2d_40 (Convolution2D) (None, 14, 14, 288) 373536  convolution2d_39[0][0]   
____________________________________________________________________________________________________ 
convolution2d_42 (Convolution2D) (None, 14, 14, 64) 51264  convolution2d_41[0][0]   
____________________________________________________________________________________________________ 
convolution2d_43 (Convolution2D) (None, 14, 14, 128) 82048  maxpooling2d_9[0][0]    
____________________________________________________________________________________________________ 
merge_7 (Merge)     (None, 14, 14, 640) 0   convolution2d_38[0][0]   
                    convolution2d_40[0][0]   
                    convolution2d_42[0][0]   
                    convolution2d_43[0][0]   
____________________________________________________________________________________________________ 
convolution2d_44 (Convolution2D) (None, 14, 14, 160) 102560  merge_7[0][0]      
____________________________________________________________________________________________________ 
convolution2d_46 (Convolution2D) (None, 14, 14, 64) 41024  merge_7[0][0]      
____________________________________________________________________________________________________ 
convolution2d_45 (Convolution2D) (None, 7, 7, 256)  368896  convolution2d_44[0][0]   
____________________________________________________________________________________________________ 
convolution2d_47 (Convolution2D) (None, 7, 7, 128)  204928  convolution2d_46[0][0]   
____________________________________________________________________________________________________ 
maxpooling2d_10 (MaxPooling2D) (None, 7, 7, 640)  0   merge_7[0][0]      
____________________________________________________________________________________________________ 
merge_8 (Merge)     (None, 7, 7, 1024) 0   convolution2d_45[0][0]   
                    convolution2d_47[0][0]   
                    maxpooling2d_10[0][0]    
____________________________________________________________________________________________________ 
convolution2d_49 (Convolution2D) (None, 7, 7, 192)  196800  merge_8[0][0]      
____________________________________________________________________________________________________ 
convolution2d_51 (Convolution2D) (None, 7, 7, 48)  49200  merge_8[0][0]      
____________________________________________________________________________________________________ 
maxpooling2d_11 (MaxPooling2D) (None, 7, 7, 1024) 0   merge_8[0][0]      
____________________________________________________________________________________________________ 
convolution2d_48 (Convolution2D) (None, 7, 7, 384)  393600  merge_8[0][0]      
____________________________________________________________________________________________________ 
convolution2d_50 (Convolution2D) (None, 7, 7, 384)  663936  convolution2d_49[0][0]   
____________________________________________________________________________________________________ 
convolution2d_52 (Convolution2D) (None, 7, 7, 128)  153728  convolution2d_51[0][0]   
____________________________________________________________________________________________________ 
convolution2d_53 (Convolution2D) (None, 7, 7, 128)  131200  maxpooling2d_11[0][0]    
____________________________________________________________________________________________________ 
merge_9 (Merge)     (None, 7, 7, 1024) 0   convolution2d_48[0][0]   
                    convolution2d_50[0][0]   
                    convolution2d_52[0][0]   
                    convolution2d_53[0][0]   
____________________________________________________________________________________________________ 
convolution2d_55 (Convolution2D) (None, 7, 7, 192)  196800  merge_9[0][0]      
____________________________________________________________________________________________________ 
convolution2d_57 (Convolution2D) (None, 7, 7, 48)  49200  merge_9[0][0]      
____________________________________________________________________________________________________ 
maxpooling2d_12 (MaxPooling2D) (None, 7, 7, 1024) 0   merge_9[0][0]      
____________________________________________________________________________________________________ 
convolution2d_54 (Convolution2D) (None, 7, 7, 384)  393600  merge_9[0][0]      
____________________________________________________________________________________________________ 
convolution2d_56 (Convolution2D) (None, 7, 7, 384)  663936  convolution2d_55[0][0]   
____________________________________________________________________________________________________ 
convolution2d_58 (Convolution2D) (None, 7, 7, 128)  153728  convolution2d_57[0][0]   
____________________________________________________________________________________________________ 
convolution2d_59 (Convolution2D) (None, 7, 7, 128)  131200  maxpooling2d_12[0][0]    
____________________________________________________________________________________________________ 
merge_10 (Merge)     (None, 7, 7, 1024) 0   convolution2d_54[0][0]   
                    convolution2d_56[0][0]   
                    convolution2d_58[0][0]   
                    convolution2d_59[0][0]   
____________________________________________________________________________________________________ 
averagepooling2d_1 (AveragePoolin(None, 1, 1, 1024) 0   merge_10[0][0]     
____________________________________________________________________________________________________ 
flatten_1 (Flatten)    (None, 1024)   0   averagepooling2d_1[0][0]   
____________________________________________________________________________________________________ 
dense_1 (Dense)     (None, 3)    3075  flatten_1[0][0]     
____________________________________________________________________________________________________ 
lambda_1 (Lambda)    (None, 3)    0   dense_1[0][0]      
==================================================================================================== 
Total params: 7328819 
+0

どのバックエンドをお使いですか? –

+0

申し訳ありません。私は言及するのを忘れた。私はテンソルフローを使用しています。投稿も更新されました。 – DalekSupreme

+0

このネットワークを使用して得たサンプルベクトルを追加できますか? 1秒と-1秒しかありませんか? –

答えて

1

私は問題を発見!

私はtensorflowをバッキングとして使用しており、K.l2_normalize(x、axis)はtf.nn.l2_normalize(x、dim、epsilon = 1e-12、name = None)を呼び出します。このメソッドには1つの余分なパラメータεがあることに注意してください。次のように、このメソッドはなりますので、

with ops.name_scope(name, "l2_normalize", [x]) as name: 
    x = ops.convert_to_tensor(x, name="x") 
    square_sum = math_ops.reduce_sum(math_ops.square(x), dim, keep_dims=True) 
    x_inv_norm = math_ops.rsqrt(math_ops.maximum(square_sum, epsilon)) 
return math_ops.mul(x, x_inv_norm, name=name) 

ネットの出力は、(デフォルトでは1e-12に設定されている)イプシロン、その後の数字が低く含まれている場合、私の場合は何が起こるかである、正しく正規化されていません。

関連する問題