在tf.map_fn中使用具有批处理规范化的模型

我实现了具有多个批处理归一化层的模型。 然后,在使用tensorflow.map_fn的MAML实现(https://arxiv.org/pdf/1703.03400.pdf)中调用此模型。 运行代码会产生以下错误: TypeError: Incompatible types: <dtype: 'resource'> vs. int64. Value is 0

一种可能的解决方案是将批处理规范化层包装在tf.keras.layers.TimeDistributed中,但是由于我将其用于MAML实现,即不同的步骤不是时间步骤,而是不同的任务,因此我不确定这是否是正确的方法。

这是显示问题的更简单的代码摘录(不是完整的MAML实现)

import tensorflow as tf
from tensorflow import keras

mod_l1 = keras.layers.Input(shape=(10,10,3),dtype=tf.float32)
mod_l2 = keras.layers.Conv2D(
    10,(2,2),strides=2,padding='valid',data_format='channels_last',activation=None,use_bias=True
)
mod_l3 = keras.layers.BatchNormalization()
mod_l4 = keras.layers.Dense(3)

mod_out = mod_l2(mod_l1)
mod_out = mod_l3(mod_out)
mod_out = mod_l4(mod_out)
mod = keras.Model(inputs=mod_l1,outputs=mod_out)

def bla(my_in):
    in1,curr_labels = my_in

    loss = keras.losses.categorical_crossentropy(
        mod4(in1),curr_labels,from_logits=False,label_smoothing=0
    )
    return tf.reduce_mean(loss)


bla_out = tf.map_fn(
    bla,[
        tf.placeholder(shape=(None,None,dtype=tf.float32),tf.placeholder(shape=(None,dtype=tf.float32)
    ],tf.float32
)

opt = tf.train.AdamOptimizer()
loss = tf.reduce_sum(bla_out)
train = opt.minimize(loss,var_list=mod.trainable_weights)

您是否有避免此错误消息的建议,或者仅使用TimeDistributed是正确的方法?

谢谢。

sja811024 回答:在tf.map_fn中使用具有批处理规范化的模型

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3162812.html

大家都在问