【发布时间】: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