无法为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
相关产品推荐
相关产品推荐

