【问题标题】:How to translate a conv2D in keras or tensorflow which is already implemented in PyTorch?如何在 keras 或 tensorflow 中翻译已经在 PyTorch 中实现的 conv2D?
【发布时间】:2021-07-21 22:57:55
【问题描述】:

我在 pytorch 实现中具有以下功能,用于将 conv2D 层替换为 3 个不同的层:

first_layer = torch.nn.Conv2d(in_channels=3, \
            out_channels=3, kernel_size=1,
            stride=1, padding=0, dilation = (1,1), bias=False)

core_layer = torch.nn.Conv2d(in_channels=3, \
            out_channels=16, kernel_size=(3,3),
            stride=(1,1), padding=(1,1), dilation=(1,1),
            bias=False)

last_layer = torch.nn.Conv2d(in_channels=16, \
                                 out_channels=64], kernel_size=1, stride=1,
                                 padding=0, dilation=(1,1), bias=True)

last_layer.bias.data = layer.bias.data

first_layer.weight.data = \
        torch.transpose(first, 1, 0).unsqueeze(-1).unsqueeze(-1)
last_layer.weight.data = last.unsqueeze(-1).unsqueeze(-1)
core_layer.weight.data = core

new_layers = [first_layer, core_layer, last_layer]
y = nn.Sequential(*new_layers)

其中,'first' 表示随机 3 x 3 矩阵。 'core' 表示形状 [16,3,3,3] 的张量 'last' 表示另一个大小为 (64,16) 的随机矩阵。

当我尝试将其翻译成 keras 时,我有以下内容:

first_layer = tf.keras.layers.SeparableConv2D(3, kernel_size=1, strides = (1,1), padding = 'same',  dilation_rate = (1,1), use_bias = False )

core_layer = tf.keras.layers.Conv2D(16, kernel_size=3, strides = (1,1), padding = (1,1), dilation_rate = (1,1), use_bias = False)

last_layer = tf.keras.layers.SeparableConv2D(64, kernel_size=1, strides = (1,1), \
                           padding = 'same', dilation_rate = (1,1), use_bias =True )

first_layer = tf.expand_dims(tf.expand_dims(tf.transpose(first, perm = [1,0]),0),0)
    
last_layer = tf.expand_dims(tf.expand_dims(last, 0),0)
core_layer = core
new_layers = [first_layer, core_layer, last_layer]

当我试图在 keras 中取回模型的权重时,我得到一个根本没有权重的列表。不执行卷积。关于如何进一步/将上述 pytorch 实现转换为 keras 或 tensorflow 的任何其他方法的任何想法?

【问题讨论】:

    标签: tensorflow keras deep-learning pytorch conv-neural-network


    【解决方案1】:

    您完全错过了 Keras 转换的最后一步。

    TensorFlow(Keras) 中还有一个Sequential() 类,您可以使用它来实例化模型。

    我还没有检查 TF 和 PyTorch 之间的完全匹配,但这应该是您解决问题的起点。

    model = tf.keras.Sequential([first_layer, core_layer, last_layer])
    y = model(x)
    

    【讨论】:

    • 您好,感谢您的回复。我尝试了该命令,但最终出现错误说明“模块'keras.layers'没有属性'Sequential'。
    • 看我写的。顺序不在层中,而是在 tf.keras
    猜你喜欢
    • 1970-01-01
    • 2020-03-19
    • 2020-11-17
    • 2018-01-12
    • 2020-12-24
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    相关资源
    最近更新 更多