title: converting VGG functional model into sequential model in Keras
body: <p>I am actually trying to get a Sequential model version of VGG16 with Keras. The functional version can be obtained with:</p>
  
  <pre><code>from __future__ import division, print_function
  
  import os, json
  from glob import glob
  import numpy as np
  from scipy import misc, ndimage
  from scipy.ndimage.interpolation import zoom
  
  from keras import backend as K
  from keras.layers.normalization import BatchNormalization
  from keras.utils.data_utils import get_file
  from keras.models import Sequential
  from keras.layers.core import Flatten, Dense, Dropout, Lambda
  from keras.layers.convolutional import Convolution2D, MaxPooling2D, ZeroPadding2D
  from keras.layers.pooling import GlobalAveragePooling2D
  from keras.optimizers import SGD, RMSprop, Adam
  from keras.preprocessing import image
  import keras   
  import keras.applications.vgg16
  from  keras.layers import Input
  
  input_tensor = Input(shape=(224,224,3))
  VGG_model=keras.applications.vgg16.VGG16(weights='imagenet',include_top= True,input_tensor=input_tensor)
  </code></pre>
  
  <p>Its summary goes like this :</p>
  
  <pre><code>VGG_model.summary()
  
  Layer (type)                     Output Shape          Param #     Connected to                     
  ====================================================================================================
  input_1 (InputLayer)             (None, 224, 224, 3)   0                                            
  ____________________________________________________________________________________________________
  block1_conv1 (Convolution2D)     (None, 224, 224, 64)  1792        input_1[0][0]                    
  ____________________________________________________________________________________________________
  block1_conv2 (Convolution2D)     (None, 224, 224, 64)  36928       block1_conv1[0][0]               
  ____________________________________________________________________________________________________
  block1_pool (MaxPooling2D)       (None, 112, 112, 64)  0           block1_conv2[0][0]               
  ____________________________________________________________________________________________________
  block2_conv1 (Convolution2D)     (None, 112, 112, 128) 73856       block1_pool[0][0]                
  ____________________________________________________________________________________________________
  block2_conv2 (Convolution2D)     (None, 112, 112, 128) 147584      block2_conv1[0][0]               
  ____________________________________________________________________________________________________
  block2_pool (MaxPooling2D)       (None, 56, 56, 128)   0           block2_conv2[0][0]               
  ____________________________________________________________________________________________________
  block3_conv1 (Convolution2D)     (None, 56, 56, 256)   295168      block2_pool[0][0]                
  ____________________________________________________________________________________________________
  block3_conv2 (Convolution2D)     (None, 56, 56, 256)   590080      block3_conv1[0][0]               
  ____________________________________________________________________________________________________
  block3_conv3 (Convolution2D)     (None, 56, 56, 256)   590080      block3_conv2[0][0]               
  ____________________________________________________________________________________________________
  block3_pool (MaxPooling2D)       (None, 28, 28, 256)   0           block3_conv3[0][0]               
  ____________________________________________________________________________________________________
  block4_conv1 (Convolution2D)     (None, 28, 28, 512)   1180160     block3_pool[0][0]                
  ____________________________________________________________________________________________________
  block4_conv2 (Convolution2D)     (None, 28, 28, 512)   2359808     block4_conv1[0][0]               
  ____________________________________________________________________________________________________
  block4_conv3 (Convolution2D)     (None, 28, 28, 512)   2359808     block4_conv2[0][0]               
  ____________________________________________________________________________________________________
  block4_pool (MaxPooling2D)       (None, 14, 14, 512)   0           block4_conv3[0][0]               
  ____________________________________________________________________________________________________
  block5_conv1 (Convolution2D)     (None, 14, 14, 512)   2359808     block4_pool[0][0]                
  ____________________________________________________________________________________________________
  block5_conv2 (Convolution2D)     (None, 14, 14, 512)   2359808     block5_conv1[0][0]               
  ____________________________________________________________________________________________________
  block5_conv3 (Convolution2D)     (None, 14, 14, 512)   2359808     block5_conv2[0][0]               
  ____________________________________________________________________________________________________
  block5_pool (MaxPooling2D)       (None, 7, 7, 512)     0           block5_conv3[0][0]               
  ____________________________________________________________________________________________________
  flatten (Flatten)                (None, 25088)         0           block5_pool[0][0]                
  ____________________________________________________________________________________________________
  fc1 (Dense)                      (None, 4096)          102764544   flatten[0][0]                    
  ____________________________________________________________________________________________________
  fc2 (Dense)                      (None, 4096)          16781312    fc1[0][0]                        
  ____________________________________________________________________________________________________
  predictions (Dense)              (None, 1000)          4097000     fc2[0][0]                        
  ====================================================================================================
  Total params: 138,357,544
  Trainable params: 138,357,544
  Non-trainable params: 0
  ____________________________________________________________________________________________________
  </code></pre>
  
  <p>According to this website <a href="https://github.com/fchollet/keras/issues/3190" rel="nofollow noreferrer">https://github.com/fchollet/keras/issues/3190</a> , it says </p>
  
  <pre><code>Sequential(layers=functional_model.layers)
  </code></pre>
  
  <p>Could covert functional models into sequential model. However, if I do:</p>
  
  <pre><code>model = Sequential(layers=VGG_model.layers)
  model.summary()
  </code></pre>
  
  <p>It leads to </p>
  
  <pre><code>Layer (type)                     Output Shape          Param #     Connected to                     
  ====================================================================================================
  input_1 (InputLayer)             (None, 224, 224, 3)   0                                            
  ____________________________________________________________________________________________________
  block1_conv1 (Convolution2D)     (None, 224, 224, 64)  1792        input_1[0][0]                    
                                                                     input_1[0][0]                    
                                                                     input_1[0][0]                    
  ____________________________________________________________________________________________________
  block1_conv2 (Convolution2D)     (None, 224, 224, 64)  36928       block1_conv1[0][0]               
                                                                     block1_conv1[1][0]               
                                                                     block1_conv1[2][0]               
  ____________________________________________________________________________________________________
  block1_pool (MaxPooling2D)       (None, 112, 112, 64)  0           block1_conv2[0][0]               
                                                                     block1_conv2[1][0]               
                                                                     block1_conv2[2][0]               
  ____________________________________________________________________________________________________
  block2_conv1 (Convolution2D)     (None, 112, 112, 128) 73856       block1_pool[0][0]                
                                                                     block1_pool[1][0]                
                                                                     block1_pool[2][0]                
  ____________________________________________________________________________________________________
  block2_conv2 (Convolution2D)     (None, 112, 112, 128) 147584      block2_conv1[0][0]               
                                                                     block2_conv1[1][0]               
                                                                     block2_conv1[2][0]               
  ____________________________________________________________________________________________________
  block2_pool (MaxPooling2D)       (None, 56, 56, 128)   0           block2_conv2[0][0]               
                                                                     block2_conv2[1][0]               
                                                                     block2_conv2[2][0]               
  ____________________________________________________________________________________________________
  block3_conv1 (Convolution2D)     (None, 56, 56, 256)   295168      block2_pool[0][0]                
                                                                     block2_pool[1][0]                
                                                                     block2_pool[2][0]                
  ____________________________________________________________________________________________________
  block3_conv2 (Convolution2D)     (None, 56, 56, 256)   590080      block3_conv1[0][0]               
                                                                     block3_conv1[1][0]               
                                                                     block3_conv1[2][0]               
  ____________________________________________________________________________________________________
  block3_conv3 (Convolution2D)     (None, 56, 56, 256)   590080      block3_conv2[0][0]               
                                                                     block3_conv2[1][0]               
                                                                     block3_conv2[2][0]               
  ____________________________________________________________________________________________________
  block3_pool (MaxPooling2D)       (None, 28, 28, 256)   0           block3_conv3[0][0]               
                                                                     block3_conv3[1][0]               
                                                                     block3_conv3[2][0]               
  ____________________________________________________________________________________________________
  block4_conv1 (Convolution2D)     (None, 28, 28, 512)   1180160     block3_pool[0][0]                
                                                                     block3_pool[1][0]                
                                                                     block3_pool[2][0]                
  ____________________________________________________________________________________________________
  block4_conv2 (Convolution2D)     (None, 28, 28, 512)   2359808     block4_conv1[0][0]               
                                                                     block4_conv1[1][0]               
                                                                     block4_conv1[2][0]               
  ____________________________________________________________________________________________________
  block4_conv3 (Convolution2D)     (None, 28, 28, 512)   2359808     block4_conv2[0][0]               
                                                                     block4_conv2[1][0]               
                                                                     block4_conv2[2][0]               
  ____________________________________________________________________________________________________
  block4_pool (MaxPooling2D)       (None, 14, 14, 512)   0           block4_conv3[0][0]               
                                                                     block4_conv3[1][0]               
                                                                     block4_conv3[2][0]               
  ____________________________________________________________________________________________________
  block5_conv1 (Convolution2D)     (None, 14, 14, 512)   2359808     block4_pool[0][0]                
                                                                     block4_pool[1][0]                
                                                                     block4_pool[2][0]                
  ____________________________________________________________________________________________________
  block5_conv2 (Convolution2D)     (None, 14, 14, 512)   2359808     block5_conv1[0][0]               
                                                                     block5_conv1[1][0]               
                                                                     block5_conv1[2][0]               
  ____________________________________________________________________________________________________
  block5_conv3 (Convolution2D)     (None, 14, 14, 512)   2359808     block5_conv2[0][0]               
                                                                     block5_conv2[1][0]               
                                                                     block5_conv2[2][0]               
  ____________________________________________________________________________________________________
  block5_pool (MaxPooling2D)       (None, 7, 7, 512)     0           block5_conv3[0][0]               
                                                                     block5_conv3[1][0]               
                                                                     block5_conv3[2][0]               
  ____________________________________________________________________________________________________
  flatten (Flatten)                (None, 25088)         0           block5_pool[0][0]                
                                                                     block5_pool[1][0]                
                                                                     block5_pool[2][0]                
  ____________________________________________________________________________________________________
  fc1 (Dense)                      (None, 4096)          102764544   flatten[0][0]                    
                                                                     flatten[1][0]                    
                                                                     flatten[2][0]                    
  ____________________________________________________________________________________________________
  fc2 (Dense)                      (None, 4096)          16781312    fc1[0][0]                        
                                                                     fc1[1][0]                        
                                                                     fc1[2][0]                        
  ____________________________________________________________________________________________________
  predictions (Dense)              (None, 1000)          4097000     fc2[0][0]                        
                                                                     fc2[1][0]                        
                                                                     fc2[2][0]                        
  ====================================================================================================
  Total params: 138,357,544
  Trainable params: 138,357,544
  Non-trainable params: 0
  _
  </code></pre>
  
  <p>This is different from the original functional model since the new layer is connected to the previous layer 3 times. People say it is more powerful to use functional models. But what I want to do is just to pop the final prediction layer. And functional model cannot do this...</p>