You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法为U-Net分割任务导入预训练ResNet34模型求助

加载预训练ResNet34作为U-Net编码器时的导入错误

我尝试用以下代码加载预训练ResNet34作为U-Net编码器的下采样路径:

from tensorflow.keras.applications import ResNet34
from tensorflow.keras.layers import Input

# create the ResNet34 encoder
inputs = Input(shape=(512, 512, 3))
encoder = ResNet34(include_top=False, weights='imagenet', input_tensor=inputs)

# set encoder layers to non-trainable
for layer in encoder.layers:
    layer.trainable = False

运行后出现如下导入错误:

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-44-45ab730a26ec> in <module>
----> 1 from tensorflow.keras.applications import ResNet34
      2 from tensorflow.keras.layers import Input
      3 
      4 # create the ResNet34 encoder
      5 inputs = Input(shape=(512, 512, 3))

ImportError: cannot import name 'ResNet34' from 'tensorflow.keras.applications' (/usr/local/lib/python3.8/dist-packages/keras/api/_v2/keras/applications/__init__.py)

---------------------------------------------------------------------------
NOTE: If your import is failing due to a missing package, you can
manually install dependencies using either !pip or !apt.

To view examples of installing some common dependencies, click the
"Open Examples" button below.
---------------------------------------------------------------------------

尝试直接用Keras导入,但weights参数不被识别。


解决办法

  • 核心原因:TensorFlow官方的tf.keras.applications模块里没有内置ResNet34,只包含ResNet50、ResNet101、ResNet152这类大参数量版本。

方案1:使用独立的Keras Applications库

先安装依赖包:

pip install keras-applications

然后修改导入和模型初始化代码(注意参数需要指定后端框架):

from keras_applications.resnet import ResNet34
from tensorflow.keras.layers import Input

inputs = Input(shape=(512, 512, 3))
# 必须指定backend、layers、models参数,匹配TensorFlow环境
encoder = ResNet34(include_top=False, 
                   weights='imagenet', 
                   input_tensor=inputs,
                   backend='tensorflow',
                   layers='keras',
                   models='keras')

# 设置编码器层不可训练
for layer in encoder.layers:
    layer.trainable = False

方案2:改用TensorFlow内置的ResNet模型替代

如果可以接受用ResNet50替代ResNet34,直接修改代码即可,无需额外安装:

from tensorflow.keras.applications import ResNet50
from tensorflow.keras.layers import Input

inputs = Input(shape=(512, 512, 3))
encoder = ResNet50(include_top=False, weights='imagenet', input_tensor=inputs)

for layer in encoder.layers:
    layer.trainable = False

内容的提问来源于stack exchange,提问作者anastasia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:45:05