I have a problem similar to this post: Tensorflow 2.1.0 - An op outside of the function building code is being passed a "Graph" tensor
My model includes a TimeDistributed wrapper around a CNN, whose input layer is first normalized by a lambda function:
# ENCODER
# video input
frames = 10
video_input = tf.keras.Input(shape=(frames, 256, 256, 3))
# cnn 1 frame input
frame_in = Input(shape=(256,256,3), name='frame_input')
#normalisation layer
cnn = Lambda(lambda inputs: frame_in / 255)(frame_in)
# add cnn layers + activations
cnn = Conv2D(filters=num_filters[0], kernel_size=(4,4), strides=(4,4), padding='same', activation = 'relu', data_format='channels_last', name = 'Layer_1')(cnn) #input_shape=(64,64,3), data_format='channels_last'), name = 'Layer_1')(frame_in)
cnn = Conv2D(filters=num_filters[1], kernel_size=(4,4), strides=(4,4), padding='same', activation = 'relu', name = 'Layer_2')(cnn)
cnn = Conv2D(filters=num_filters[2], kernel_size=(4,4), strides=(2,2), padding='same', activation = 'relu', name = 'Layer_3')(cnn)
cnn = Conv2D(filters=num_filters[3], kernel_size=(4,4), strides=(2,2), padding='same', activation = 'relu', name = 'Layer_4')(cnn)
cnn = Conv2D(filters=num_filters[4], kernel_size=(4,4), strides=(1,1), padding='valid', activation = 'relu', name = 'Layer_5')(cnn)
# flatten
cnn = Flatten()(cnn)
#time distributed
time_dist_cnn = Model(inputs=frame_in, outputs=cnn, name='Time_Distributed_CNN')
time_dist_0 = TimeDistributed(time_dist_cnn)(video_input)
The error is the same:
TypeError: An op outside of the function building code is being passed
a "Graph" tensor. It is possible to have Graph tensors
leak out of the function building context by including a
tf.init_scope in your function building code.
For example, the following function will fail:
@tf.function
def has_init_scope():
my_constant = tf.constant(1.)
with tf.init_scope():
added = my_constant * 2
The graph tensor has name: frame_input:0
I know the problem is almost the same, and stems from the use of a lambda expression, but I'm not sure how to solve it in this context.