首页 > 解决方案 > load_model() 缺少 1 个必需的位置参数:“文件路径”

问题描述

一直在关注一些关于 Tensorflow 和 Keras 的指南,python 新手,来自 c++。有一个问题说“load_model() 缺少 1 个必需的位置参数:'filepath'”

这是我的代码:

from keras.datasets import cifar10
import keras.utils as utils
from keras.models import load_model
import numpy as np

labelsArray = ["airplane","automobile","bird","cat","deer","dog","frog","horse","ship","truck"]

(_, _), (testImages, testLabels) = cifar10.load_data()

testImages = testImages.astype('float32') / 255.0
testLabels = utils.to_categorical(testLabels)

model = load_model(filepath='Image_Classifier.h5')

results = model.evaluate(x=testImages, y=testLabels)
print("Train loss:", results[0])
print("Test Accuracy:", results[1])

标签: pythontensorflowkeras

解决方案


TL;DR修复方法是不将文件路径指定为关键字参数:

model = load_model('Image_Classifier.h5')

更长的解释:

我认为原因是它filepath被视为位置参数而不是关键字参数(有关这些解释,请参见词汇表parameter中的条目)。如果您查看函数本身,这会令人困惑,因为签名是:load_model

def load_model(filepath, custom_objects=None, compile=True)

filepath是一个位置或关键字参数 - 您可以只在第一个位置传递文件名,也可以按照您所做的和所说的做filepath='Image_Classifier.h5'。但是,还有一些更复杂的机器。我运行您的代码时收到的错误是

    model = load_model(filepath='Image_Classifier.h5')
File "/Users/adam/.miniconda3/envs/tf/lib/python3.7/site-packages/keras/engine/saving.py", line 492, in load_wrapper
    return load_function(*args, **kwargs)
TypeError: load_model() missing 1 required positional argument: 'filepath'

请注意,该load_model函数不是直接调用的,而是通过load_wrapper带有签名的函数

def load_wrapper(*args, **kwargs)

函数签名允许任意数量的位置参数后跟任意数量的关键字参数。然后,该函数似乎对传入的内容进行了一些处理以查找关键字 args,我的猜测是,如果您作为关键字参数传递,那么即使该函数只期望一件事filepath,它也没有任何要传递的东西被通过位置。*argsload_model*args

最终结果filepath被视为仅位置参数,您必须直接传递该值而不将其指定为关键字参数。


推荐阅读