1

我已经使用提供的 MobileNet V3 定义(小)训练了许多图表,但是当我运行(tensorflow)Lucid 以生成可视化时,Lucid 失败并出现错误。如果我修改定义以排除 Squeeze/Excite 块,则会生成可视化。

安装了 Tensorflow 1.14 和 Lucid,我从这里下载了训练有素的 MobileNet V3 图形文件“Small dm=0.75 (float)”(https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet ),将文件解压缩到我的“D:/temp”中,然后运行以下代码:

import tensorflow as tf
import lucid.optvis.render as render
from lucid.modelzoo.vision_base import Model

class SSDMobilenetV3( Model ):
    def __init__( self, graph_path  ):        
        self.model_path = graph_path
        self.input_name = "input"
        self.image_shape = [ 224, 224, 3 ]
        self.image_value_range = ( -1, 1 )
        super().__init__()

model = SSDMobilenetV3( "D:/temp/v3-small_224_0.75_float/v3-small_224_0.75_float.pb" )
model.load_graphdef()

#model.show_graph()

_ = render.render_vis( model, "MobilenetV3/expanded_conv_6/output:0" )

有相当多的堆栈跟踪,但关键错误是:

LookupError: gradient registry has no entry for: AddV2

LookupError: No gradient defined for operation 'import/MobilenetV3/expanded_conv_6/squeeze_excite/Conv_1/add' (op type: AddV2)

然后我尝试使用“mobilenet_v3.py”中的 V3_SMALL_MINIMALISTIC 定义(注册一个新的特征提取器)来训练一个测试模型。这本质上是相同的模型,但没有“squeeze_excite”插入(尽管我也恢复了 hard_swish 激活函数)。

上面的代码在新模型上运行良好,渲染图像。

这让我相信问题在于“squeeze_excite”实现(在 slim/nets/mobilenet/conv_blocks.py 中)。

但我无法进一步诊断问题:是 Lucid,是 Squeeze/Excite 块,是 TensorFlow,还是只是一个关于世界的事实?

4

0 回答 0