1、keras卷積操作中border_mode的實現
def conv_output_length(input_length, filter_size, border_mode, stride): if input_length is None: return None assert border_mode in {'same', 'valid'} if border_mode == 'same': output_length = input_length elif border_mode == 'valid': output_length = input_length - filter_size + 1 return (output_length + stride - 1) // stride
總結:如果卷積的方式選擇為same,那么卷積操作的輸入和輸出尺寸會保持一致。如果選擇valid,那卷積過后,尺寸會變小。
2.卷積的操作中,如果使用same,或valid這種模式,有時候會不靈活。必要的時候,需要我們自己去進行補零操作,慶幸的是keras的補零操作是非常靈活的。
keras.layers.convolutional.ZeroPadding2D(padding=(1, 1), dim_ordering='default')
說明:這是keras中的補零操作,下面舉2個例子。
padding= (1,0),會在行的最前和最后都增加一行0。比方說,原來的尺寸為(None,20,11,1),padding之后就會變成(None,22,11,1).
padding= (1,1),會在行和列的最前和最后都增加一行0。比方說,原來的尺寸為(None,20,11,1),padding之后就會變成(None,22,13,1).
說明:在復現某個網絡的過程中,作者使用的是寬卷積,也即長度為N,濾波器的大小為w,那么卷積之后的結果為N+W-1。這個跟數字信號處理中的卷積操作是一致的。這個就沒辦法用keras的API,所以直接使用padding就可以了。
