【问题标题】:Keras mobilenet implementationKeras 移动网络实现
【发布时间】:2018-06-03 18:23:11
【问题描述】:

我想使用具有不同深度乘数(或分辨率乘数)值的移动网络。这两行代码给了我以下错误。知道这里出了什么问题吗?

from keras.applications.mobilenet import MobileNet
basic_model = MobileNet(alpha=0.25, depth_multiplier=0.25, weights=None)

错误:

Traceback(最近一次通话最后一次):

文件“C:/Users/Pedro/Desktop/Work/Smile/files/CVPR_2016_SMILES_DATA/test.py”,第 2 行,在 basic_model = MobileNet(alpha=0.25, depth_multiplier=0.25, weights=None)

文件“C:\Users\Pedro\Anaconda3\lib\site-packages\keras\applications\mobilenet.py”,第 456 行,在 MobileNet 中 x = _depthwise_conv_block(x, 64, alpha, depth_multiplier, block_id=1)

文件“C:\Users\Pedro\Anaconda3\lib\site-packages\keras\applications\mobilenet.py”,第 654 行,在 _depthwise_conv_block name='conv_dw_%d' % block_id)(inputs)

文件“C:\Users\Pedro\Anaconda3\lib\site-packages\keras\engine\topology.py”,第 576 行,在 call self.build(input_shapes[0])

文件“C:\Users\Pedro\Anaconda3\lib\site-packages\keras\applications\mobilenet.py”,第 228 行,在 build constraint=self.depthwise_constraint)

文件“C:\Users\Pedro\Anaconda3\lib\site-packages\keras\legacy\interfaces.py”,第 87 行,在包装器中返回 func(*args, **kwargs)

文件“C:\Users\Pedro\Anaconda3\lib\site-packages\keras\engine\topology.py”,第 397 行,add_weight weight = K.variable(initializer(shape),

文件“C:\Users\Pedro\Anaconda3\lib\site-packages\keras\initializers.py”,第 212 行,在 call dtype=dtype, seed=self.seed)

文件“C:\Users\Pedro\Anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py”,第 3627 行,random_uniform dtype=dtype,seed=seed)

文件“C:\Users\Pedro\Anaconda3\lib\site-packages\tensorflow\python\ops\random_ops.py”,第 240 行,random_uniform 形状,dtype,seed=seed1,seed2=seed2)

文件“C:\Users\Pedro\Anaconda3\lib\site-packages\tensorflow\python\ops\gen_random_ops.py”,第 247 行,在 _random_uniform seed=seed, seed2=seed2, name=name)

文件 "C:\Users\Pedro\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", 第 589 行,在 apply_op 中 param_name=input_name)

文件 "C:\Users\Pedro\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", 第 60 行,在 _SatisfiesTypeConstraint ", ".join(dtypes.as_dtype(x).name for x in allowed_list)))

TypeError: 传递给参数“shape”的值的 DataType 没有 float32 在允许值列表中:int32、int64

来自mobilent paper:“降低神经网络计算成本的第二个超参数是分辨率乘数 ρ。我们将其应用于输入图像,随后每一层的内部表示都减少相同的乘数。在实践中,我们通过设置输入分辨率隐式设置 ρ。我们现在可以将网络核心层的计算成本表示为具有宽度乘数 α 和分辨率乘数 ρ 的深度可分离卷积: DK · DK · αM · ρDF · ρDF + αM · αN · ρDF · ρDF (7) 其中 ρ ∈ (0, 1] 通常是隐式设置的,因此网络的输入分辨率为 224、192、160 或 128。ρ = 1 是基线 MobileNet,ρ

Keras 声称 depth_multiplier 与 herehere 中的分辨率乘数相同:“depth_multiplier:深度卷积的深度乘数(也称为分辨率乘数)”

【问题讨论】:

    标签: machine-learning neural-network keras deep-learning conv-neural-network


    【解决方案1】:

    答案在回溯调用的底部。

    它需要一个整数,例如 25(没有小数点的数字)而不是浮点数,例如0.25

    depth_multiplier:深度卷积输出通道数 对于每个输入通道。 深度卷积输出的总数 频道将等于filters_in * depth_multiplier

    参考:https://github.com/fchollet/deep-learning-models/blob/master/mobilenet.py

    【讨论】:

    • 但正如 paper 中提到的,它可以是 0 到 1 之间的值。
    • 通过乘以这个值,我们打算减少参数的数量并且总体上使模型更快。通过将比 1 更大的数字相乘,我们将完全相反。
    • 不确定。有人在这里问过这个问题:stats.stackexchange.com/questions/327410/…
    • 我编辑了我提出的问题;从 mobilenet 论文和 keras 中添加了更多信息。
    【解决方案2】:

    这似乎只是不好的命名,它们并不相同。你可以阅读更多here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      • 2021-02-16
      • 2017-06-12
      相关资源
      最近更新 更多