Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法使用权重文件脱机加载keras resnet50模型_Python_Keras - Fatal编程技术网

Python 无法使用权重文件脱机加载keras resnet50模型

Python 无法使用权重文件脱机加载keras resnet50模型,python,keras,Python,Keras,我想离线训练keras预训练的resnet50模型,但我无法加载模型 当我设置weights='imagenet'时,它会工作。它会自动下载图像净重文件 从keras.applications.resnet导入ResNet50 基本模型=ResNet50(包括顶部=False,权重=resnet,输入形状=(w,h,3),池=平均值) 但是当我手动下载相同的权重文件并设置weights=resnet\u weights\u path时,它抛出ValueError (w,h)=224 resne

我想离线训练keras预训练的resnet50模型,但我无法加载模型


当我设置
weights='imagenet'
时,它会工作。它会自动下载图像净重文件

从keras.applications.resnet导入ResNet50
基本模型=ResNet50(包括顶部=False,权重=resnet,输入形状=(w,h,3),池=平均值)
但是当我手动下载相同的权重文件并设置
weights=resnet\u weights\u path
时,它抛出ValueError

(w,h)=224
resnet_weights_path='../input/resnet50/resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5'
基本模型=ResNet50(包括顶部=假,权重=resnet\u权重路径,输入形状=(w,h,3),池=平均值)
ValueError:形状(1、1、256、512)和(512、128、1、1)不兼容

完全回溯:

---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
1 resnet_weights_path='../input/resnet50/resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5'
2基本\u模型=ResNet50(包括\u顶部=假,权重=resnet\u权重\u路径,
---->3池(平均值)
4基本模型摘要()
/包装中的opt/conda/lib/python3.6/site-packages/keras/applications/__-init___;.py(*args,**kwargs)
18 kwargs[“模型”]=模型
19 kwargs['utils']=utils
--->20返回基地乐趣(*args,**kwargs)
21
22返回包装器
/ResNet50中的opt/conda/lib/python3.6/site-packages/keras/applications/resnet.py(*args,**kwargs)
12@keras\u模块\u注入
13 def ResNet50(*args,**kwargs):
--->14返回resnet.ResNet50(*args,**kwargs)
15
16
/ResNet50中的opt/conda/lib/python3.6/site-packages/keras_applications/resnet_common.py(包括顶部、权重、输入张量、输入形状、池、类、**kwargs)
433输入张量,输入形状,
434汇集、分类、,
-->435**夸尔格)
436
437
/resnet中的opt/conda/lib/python3.6/site-packages/keras\u applications/resnet\u common.py(堆栈fn、前置、使用偏差、模型名称、包括顶部、权重、输入张量、输入形状、池、类、**kwargs)
411型号。负载重量(重量路径)
412 elif权重不是无:
-->413型号。负载重量(重量)
414
415返回模型
/load_包装中的opt/conda/lib/python3.6/site-packages/keras/engine/saving.py(*args,**kwargs)
490操作系统删除(tmp_文件路径)
491返回res
-->492返回加载函数(*args,**kwargs)
493
494返回装载包装器
/加载权重中的opt/conda/lib/python3.6/site-packages/keras/engine/network.py(self、filepath、按名称、跳过不匹配、重塑)
1228其他:
1229保存。从组hdf5加载权重(
->1230 f,self.layers,重塑=重塑)
1231如果hasattr(f,“关闭”):
1232 f.关闭()
/opt/conda/lib/python3.6/site-packages/keras/engine/saving.py从hdf5组加载(f,层,重塑)
1235“元素”。)
1236权重值元组+=zip(符号权重、权重值)
->1237 K.批次设置值(重量值元组)
1238
1239
/批处理值(元组)中的opt/conda/lib/python3.6/site-packages/keras/backend/tensorflow\u backend.py
2958`value`应该是一个Numpy数组。
2959     """
->2960 tf_keras_后端。批处理设置值(元组)
2961
2962
/批处理值(元组)中的opt/conda/lib/python3.6/site-packages/tensorflow\u core/python/keras/backend.py
3321带有ops.init_scope():
3322对于x,以元组为单位的值:
->3323 x.assign(np.asarray(value,dtype=dtype(x)))
3324其他:
3325带有get_graph()。作为_default():
/分配中的opt/conda/lib/python3.6/site-packages/tensorflow\u core/python/ops/resource\u variable\u ops.py(self、value、use\u locking、name、read\u value)
817带_handle_图(self.handle):
818值\u张量=运算。将\u转换为\u张量(值,dtype=self.dtype)
-->819 self.\u shape.assert与(value\u tensor.shape)兼容
820分配操作=发电机资源变量操作。分配变量操作(
821 self.handle,值\u张量,name=name)
/断言中的opt/conda/lib/python3.6/site-packages/tensorflow\u core/python/framework/tensor\u shape.py与(自身、其他)兼容
1108     """
1109如果不是自身,是否与(其他)兼容:
->1110提升值错误(“形状%s和%s不兼容”%(自身、其他))
1111
1112 def最特定的兼容形状(自身、其他):
ValueError:形状(1、1、256、512)和(512、128、1、1)不兼容

它们是一种形状不匹配,除了根据权重更改架构外,无法解决,因为向量形状不匹配会导致问题

从此处下载权重,然后重试。这些是keras自身给出的权重

WEIGHTS_PATH = ('https://github.com/fchollet/deep-learning-models/'
                'releases/download/v0.2/'
                'resnet50_weights_tf_dim_ordering_tf_kernels.h5')
WEIGHTS_PATH_NO_TOP = ('https://github.com/fchollet/deep-learning-models/'
                       'releases/download/v0.2/'
                       'resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5')

这个问题可能是因为keras版本。我目前使用的keras版本是
2.3.1

请执行以下操作以解决问题:

1.使用选项
weights='imagenet'
运行代码。它会自动下载重量文件。
2.提供下载重量文件的路径

请将参数“by_name=True”添加到“model.load_weights()”中。无论是在线模式还是离线模式,它都是问题的正确解决方案。我采用离线模式,因为我的桌面上有权重

# Build model.
model = Model(inputs, x, name='resnet50')

# load weights
if weights == 'imagenet':
    if include_top:
        weights_path = WEIGHTS_PATH
    else:
        weights_path = WEIGHTS_PATH_NO_TOP
    # -model.load_weights(weights_path)
    model.load_weights(weights_path, by_name=True)

对于加载Resnet50供脱机使用的简单解决方案,您可以通过设置参数
weights='imagenet'

from keras.applications.resnet import ResNet50

base_model = ResNet50(include_top=False, weights='imagenet', input_shape=(w,h,3), pooling='avg')
使用保存模型

base_model.save("model_name.h5")
然后可以使用


你能包括完整的追踪吗?@MatiasValdenegro我已经加上了
from tensorflow.keras.models import load_model
resnet = load_model('model_name.h5')