Keras 在ResNet网络上添加图层时图形断开连接

Keras 在ResNet网络上添加图层时图形断开连接,keras,neural-network,resnet,Keras,Neural Network,Resnet,我正在尝试更改ResNet50网络的输入形状。我需要3个以上通道的输入。当您在不加载imagenet权重的情况下指定输入形状时,ResNet应用程序可以工作,但我希望使用imagenet的权重来避免长时间的训练阶段 我知道imagenet的权重适用于具有三个通道的输入形状,但从理论上讲,通过切割网络的头部并添加新的输入层,这应该是可行的 我试图删除头层,但我有一些问题,说过滤器的数量不同于3 ValueError:输入通道数与相应的 过滤器的尺寸,6!=三, 我认为可以更改输入形状的通道数,并且

我正在尝试更改ResNet50网络的输入形状。我需要3个以上通道的输入。当您在不加载imagenet权重的情况下指定输入形状时,ResNet应用程序可以工作,但我希望使用imagenet的权重来避免长时间的训练阶段

我知道imagenet的权重适用于具有三个通道的输入形状,但从理论上讲,通过切割网络的头部并添加新的输入层,这应该是可行的

我试图删除头层,但我有一些问题,说过滤器的数量不同于3

ValueError:输入通道数与相应的 过滤器的尺寸,6!=三,


我认为可以更改输入形状的通道数,并且仍然使用imagenet的权重,但我尝试的方法似乎是错误的。

我不确定keras模型是否支持其层上的列表操作,似乎弹出层不会使其忘记预期的输入大小

您可以使用输入形状初始化一个新的resnet,并手动将Imagenet权重加载到除前3层之外的所有层,前3层在其输入张量中预期有3个通道

从keras.applications.resnet50借用几行代码会导致如下结果:

import h5py
import keras
from keras_applications.resnet50 import WEIGHTS_PATH_NO_TOP

input_tensor = keras.Input((200, 200, 6))
resnet = keras.applications.ResNet50(
    input_tensor=input_tensor, weights=None, include_top=False
)

weights_path = keras.utils.get_file(
    'resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5',
    WEIGHTS_PATH_NO_TOP,
    cache_subdir='models',
    md5_hash='a268eb855778b3df3c7506639542a6af')

with h5py.File(weights_path, 'r') as f:
    for layer in resnet.layers[3:]:
        if layer.name in f:
            layer.set_weights(f[layer.name].values())

话虽如此,你尝试进行的这种转移学习并不常见,如果有效的话,我真的很好奇。你能更新一下它是否收敛得更快吗?

不,不要尝试,它不起作用,图像净重仅适用于3通道图像。为什么?因为遵循resnet架构,只有前两层发生了变化是的,但是如何重建与额外通道相关的缺失信息呢?之后你就不能再训练模特了。我将使用imagenet权重设置权重,只是避免随机初始化,因为在imagenet上学习的一些功能也可以用于我的案例中。因此,在模型创建之后,我将训练它,它正在工作。我重写了整个resnet模型,除了前3个层外,我给层取了完全相同的名称,然后我只是按名称加载层。我有点喜欢你提出的方法。你知道为什么弹出图层不会让它忘记预期的输入大小吗?A当然,如果它收敛得更快,我会告诉你
import h5py
import keras
from keras_applications.resnet50 import WEIGHTS_PATH_NO_TOP

input_tensor = keras.Input((200, 200, 6))
resnet = keras.applications.ResNet50(
    input_tensor=input_tensor, weights=None, include_top=False
)

weights_path = keras.utils.get_file(
    'resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5',
    WEIGHTS_PATH_NO_TOP,
    cache_subdir='models',
    md5_hash='a268eb855778b3df3c7506639542a6af')

with h5py.File(weights_path, 'r') as f:
    for layer in resnet.layers[3:]:
        if layer.name in f:
            layer.set_weights(f[layer.name].values())