【发布时间】:2020-09-30 12:53:48
【问题描述】:
我有一个类似这个帖子的问题:Tensorflow 2.1.0 - An op outside of the function building code is being passed a "Graph" tensor
我的模型包括一个围绕 CNN 的 TimeDistributed 包装器,其输入层首先由 lambda 函数进行归一化:
# 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)
错误是一样的:
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
我知道问题几乎相同,并且源于使用 lambda 表达式,但我不确定如何在这种情况下解决它。
【问题讨论】:
标签: python tensorflow keras deep-learning conv-neural-network