title: tensorflow version 1 Cant save model for website use
body: <pre><code>from __future__ import print_function
  
  import numpy as np
  from keras.applications.vgg16 import VGG16
  from keras.layers import *
  from keras.models import Model, load_model
  from keras.optimizers import SGD
  # from keras.optimizers import gradient_descent_v2 
  from keras.preprocessing.image import load_img, img_to_array
  import tensorflow.compat.v1 as tf
  from keras import backend as K
  
  
  config = tf.ConfigProto()
  config.gpu_options.allow_growth = True
  sess = tf.Session(config=config)
  K.set_session(sess)
  
  def convnet_model_():
      vgg_model = VGG16(weights=None, include_top=False)
      x = vgg_model.output
      x = GlobalAveragePooling2D()(x)
      x = Dense(4096, activation='relu')(x)
      x = Dropout(0.6)(x)
      x = Dense(4096, activation='relu')(x)
      x = Dropout(0.6)(x)
      x = Lambda(lambda x_: K.l2_normalize(x, axis=1))(x)
      convnet_model = Model(inputs=vgg_model.input, outputs=x)
      return convnet_model
  
  
  def deep_rank_model():
      convnet_model = convnet_model_()
      first_input = Input(shape=(224, 224, 3))
      first_conv = Conv2D(96, kernel_size=(8, 8), strides=(16, 16), padding='same')(first_input)
      first_max = MaxPool2D(pool_size=(3, 3), strides=(4, 4), padding='same')(first_conv)
      first_max = Flatten()(first_max)
      first_max = Lambda(lambda x: K.l2_normalize(x, axis=1))(first_max)
  
      second_input = Input(shape=(224, 224, 3))
      second_conv = Conv2D(96, kernel_size=(8, 8), strides=(32, 32), padding='same')(second_input)
      second_max = MaxPool2D(pool_size=(7, 7), strides=(2, 2), padding='same')(second_conv)
      second_max = Flatten()(second_max)
      second_max = Lambda(lambda x: K.l2_normalize(x, axis=1))(second_max)
  
      merge_one = concatenate([first_max, second_max])
  
      merge_two = concatenate([merge_one, convnet_model.output])
      emb = Dense(4096)(merge_two)
      l2_norm_final = Lambda(lambda x: K.l2_normalize(x, axis=1))(emb)
  
      final_model = Model(inputs=[first_input, second_input, convnet_model.input], outputs=l2_norm_final)
  
      return final_model
  </code></pre>
  <p>I am refering to online code to perform a deep ranking model training...I would like to save the model but fail to. I know that the lambda layer is stopping me to save the model.
  As I got from <a href="https://stackoverflow.com/questions/47066635/checkpointing-keras-model-typeerror-cant-pickle-thread-lock-objects,I">Checkpointing keras model: TypeError: can&#39;t pickle _thread.lock objects</a> knew that the tensorflow object may stop me form saving the model</p>
  <pre><code>---------------------------------------------------------------------------
  TypeError                                 Traceback (most recent call last)
  &lt;ipython-input-20-bdb0097d23ba&gt; in &lt;module&gt;()
        3 deep_rankmodel.save_weights(model_path)
        4 f = open('deepranking.json','w')
  ----&gt; 5 f.write(deep_rankmodel.to_json())
        6 f.close()
  
  29 frames
  /usr/lib/python3.7/copy.py in deepcopy(x, memo, _nil)
      167                     reductor = getattr(x, &quot;__reduce_ex__&quot;, None)
      168                     if reductor:
  --&gt; 169                         rv = reductor(4)
      170                     else:
      171                         reductor = getattr(x, &quot;__reduce__&quot;, None)
  
  TypeError: can't pickle _thread.RLock objects
  </code></pre>
  <p>Here are some snippet of the debug screen</p>
  <p><a href="https://i.stack.imgur.com/mTyJU.png" rel="nofollow noreferrer">Debug</a>
  Btw
  Is there any way of not using saved json model to load the model in server? Can I reconstruct the model in server using javascript or anything?</p>