Convolution 3D example

229 views
Skip to first unread message

Alex

unread,
Jan 9, 2017, 2:09:26 AM1/9/17
to Keras-users
I am trying to transfer this example of 3D convolution AlexNet type from Lasagne: https://github.com/Lasagne/Recipes/blob/master/modelzoo/c3d.py

Here is my model:

def build_model(num_classes=2):
   
    img_input
= Input(shape= (3, 1, 128, 128)) # number of frames/depth:  3 , number of channels: 1 , width: 128, height: 128
       
   
# ----------- 1st layer group ---------------
    x
= Convolution3D(nb_filter=64,kernel_dim1=3, kernel_dim2=3,kernel_dim3=3,border_mode='valid',activation='relu')(img_input)
    x
= MaxPooling3D(pool_size=(1,2,2), strides=(1,2,2), border_mode='valid')(x)


   
# ----------- 2nd layer group ---------------
    x
= Convolution3D(nb_filter=128,kernel_dim1=3, kernel_dim2=3, kernel_dim3=3,border_mode='valid',activation='relu')(x)
    x
= MaxPooling3D(pool_size=(2,2,2), strides=(2,2,2), border_mode='valid')(x)

   
# ----------- 3rd layer group ---------------
    x
= Convolution3D(nb_filter=256, kernel_dim1=3, kernel_dim2=3, kernel_dim3=3, border_mode='valid', activation='relu')(x)
    x
= Convolution3D(nb_filter=256, kernel_dim1=3, kernel_dim2=3, kernel_dim3=3, border_mode='valid', activation='relu')(x)
    x
= MaxPooling3D(pool_size=(2,2,2), strides=(2,2,2), border_mode='valid')(x)


   
# ----------- 4th layer group ---------------
    x
= Convolution3D(nb_filter=512,kernel_dim1=3, kernel_dim2=3, kernel_dim3=3, border_mode='valid', activation='relu')(x)
    x
= Convolution3D(nb_filter=512,kernel_dim1=3, kernel_dim2=3, kernel_dim3=3, border_mode='valid', activation='relu')(x)
    x
= MaxPooling3D(pool_size=(2,2,2), strides=(2,2,2), border_mode='valid')(x)

   
# ----------- 5th layer group ---------------
    x
= Convolution3D(nb_filter=512,kernel_dim1=3, kernel_dim2=3, kernel_dim3=3, border_mode='valid', activation='relu')(x)
    x
= Convolution3D(nb_filter=512,kernel_dim1=3, kernel_dim2=3, kernel_dim3=3, border_mode='valid', activation='relu')(x)  

    x
= ZeroPadding3D(padding=(1, 1, 1))(x)
    x
= MaxPooling3D(pool_size=(2,2,2), strides=(2,2,2), border_mode='valid')(x)
 
    x
= Flatten()(x)
 
    x
= Dense(4096, activation='relu')(x)
    x
= Dense(4096, activation='relu')(x)
    x
= Dense(487)(x)

    x
= Dense(num_classes, activation='softmax')(x)
   
   
return x, img_input


and here is the summary:

____________________________________________________________________________________________________
Layer (type)                     Output Shape          Param #     Connected to                    
====================================================================================================
input_1
(InputLayer)             (None, 3, 1, 128, 128 0                                            
____________________________________________________________________________________________________
convolution3d_1
(Convolution3D)  (None, 1, -1, 126, 64 221248      input_1[0][0]                    
____________________________________________________________________________________________________
maxpooling3d_1
(MaxPooling3D)    (None, 1, -1, 63, 64) 0           convolution3d_1[0][0]            
____________________________________________________________________________________________________
convolution3d_2
(Convolution3D)  (None, -1, -3, 61, 12 221312      maxpooling3d_1[0][0]            
____________________________________________________________________________________________________
maxpooling3d_2
(MaxPooling3D)    (None, -1, -2, 30, 12 0           convolution3d_2[0][0]            
____________________________________________________________________________________________________
convolution3d_3
(Convolution3D)  (None, -3, -4, 28, 25 884992      maxpooling3d_2[0][0]            
____________________________________________________________________________________________________
convolution3d_4
(Convolution3D)  (None, -5, -6, 26, 25 1769728     convolution3d_3[0][0]            
____________________________________________________________________________________________________
maxpooling3d_3
(MaxPooling3D)    (None, -3, -3, 13, 25 0           convolution3d_4[0][0]            
____________________________________________________________________________________________________
convolution3d_5
(Convolution3D)  (None, -5, -5, 11, 51 3539456     maxpooling3d_3[0][0]            
____________________________________________________________________________________________________
convolution3d_6
(Convolution3D)  (None, -7, -7, 9, 512 7078400     convolution3d_5[0][0]            
____________________________________________________________________________________________________
maxpooling3d_4
(MaxPooling3D)    (None, -4, -4, 4, 512 0           convolution3d_6[0][0]            
____________________________________________________________________________________________________
convolution3d_7
(Convolution3D)  (None, -6, -6, 2, 512 7078400     maxpooling3d_4[0][0]            
____________________________________________________________________________________________________
convolution3d_8
(Convolution3D)  (None, -8, -8, 0, 512 7078400     convolution3d_7[0][0]            
____________________________________________________________________________________________________
zeropadding3d_1
(ZeroPadding3D)  (None, -6, -6, 2, 512 0           convolution3d_8[0][0]            
____________________________________________________________________________________________________
maxpooling3d_5
(MaxPooling3D)    (None, -3, -3, 1, 512 0           zeropadding3d_1[0][0]            
____________________________________________________________________________________________________
flatten_1
(Flatten)              (None, 4608)          0           maxpooling3d_5[0][0]            
____________________________________________________________________________________________________
dense_1
(Dense)                  (None, 4096)          18878464    flatten_1[0][0]                  
____________________________________________________________________________________________________
dense_2
(Dense)                  (None, 4096)          16781312    dense_1[0][0]                    
____________________________________________________________________________________________________
dense_3
(Dense)                  (None, 487)           1995239     dense_2[0][0]                    
____________________________________________________________________________________________________
dense_4
(Dense)                  (None, 2)             976         dense_3[0][0]                    
====================================================================================================
Total params: 65527927
____________________________________________________________________________________________________
Model Compiled


I am new to Keras so probably I am doing something wrong because as you can see there a negatives in the output shapes of convolution layers. Unfortunately I haven't found a fully functional example for 3D convolution / classification. Any suggestions for correcting the model would be much appreciated.


Reply all
Reply to author
Forward
0 new messages