FileNotFoundError:[Errno 2]没有这样的文件或目录:-Fastai,尽管该文件存在

问题描述 投票:0回答:1
Traceback (most recent call last):
  File "app.py", line 34, in <module>
    learn = setup_model_pth(PATH_TO_MODELS_DIR, NAME_OF_FILE, classes)
  File "app.py", line 31, in setup_model_pth
    learn.load(learner_name_to_load, device=torch.device('cpu'))
  File "C:\Users\Caden\anaconda3\envs\tf\lib\site-packages\fastai\basic_train.py", line 269, in load
    state = torch.load(source, map_location=device)
  File "C:\Users\Caden\anaconda3\envs\tf\lib\site-packages\torch\serialization.py", line 584, in load
    with _open_file_like(f, 'rb') as opened_file:
  File "C:\Users\Caden\anaconda3\envs\tf\lib\site-packages\torch\serialization.py", line 234, in _open_file_like
    return _open_file(name_or_buffer, mode) 
  File "C:\Users\Caden\anaconda3\envs\tf\lib\site-packages\torch\serialization.py", line 215, in __init__
    super(_open_file, self).__init__(open(name, mode))
FileNotFoundError: [Errno 2] No such file or directory: 'models\\model_best.pth'

我克隆了一个github存储库,运行时显示此错误。主要问题是它没有显示这样的文件或目录:'models \ model_best.pth',但是实际上有一个目录models / model_best.pth,所以为什么它像models \ model_best.pth而不是.models / models_bestpth一样出现。

源代码:'''

from __future__ import division, print_function
import sys
import os
import glob
import re
from pathlib import Path
from io import BytesIO
import base64
import requests

# Import fast.ai Library
from fastai import *
from fastai.vision import *

# Flask utils
from flask import Flask, redirect, url_for, render_template, request
from PIL import Image as PILImage

# Define a flask app
app = Flask(__name__)

NAME_OF_FILE = 'model_best' # Name of your exported file
PATH_TO_MODELS_DIR = Path('') # by default just use /models in root dir
classes = ['Actinic keratoses', 'Basal cell carcinoma', 'Benign keratosis',
           'Dermatofibroma', 'Melanocytic nevi', 'Melanoma', 'Vascular lesions']

def setup_model_pth(path_to_pth_file, learner_name_to_load, classes):
    data = ImageDataBunch.single_from_classes(
        path_to_pth_file, classes, ds_tfms=get_transforms(), size=224).normalize(imagenet_stats)
    learn = cnn_learner(data, models.densenet169, model_dir='models')
    learn.load(learner_name_to_load, device=torch.device('cpu'))
    return learn

learn = setup_model_pth(PATH_TO_MODELS_DIR, NAME_OF_FILE, classes)

def encode(img):
    img = (image2np(img.data) * 255).astype('uint8')
    pil_img = PILImage.fromarray(img)
    buff = BytesIO()
    pil_img.save(buff, format="JPEG")
    return base64.b64encode(buff.getvalue()).decode("utf-8")

def model_predict(img):
    img = open_image(BytesIO(img))
    pred_class,pred_idx,outputs = learn.predict(img)
    formatted_outputs = ["{:.1f}%".format(value) for value in [x * 100 for x in torch.nn.functional.softmax(outputs, dim=0)]]
    pred_probs = sorted(
            zip(learn.data.classes, map(str, formatted_outputs)),
            key=lambda p: p[1],
            reverse=True
        )

    img_data = encode(img)
    result = {"class":pred_class, "probs":pred_probs, "image":img_data}
    return render_template('result.html', result=result)


@app.route('/', methods=['GET', "POST"])
def index():
    # Main page
    return render_template('index.html')


@app.route('/upload', methods=["POST", "GET"])
def upload():
    if request.method == 'POST':
        # Get the file from post request
        img = request.files['file'].read()
        if img != None:
        # Make prediction
            preds = model_predict(img)
            return preds
    return 'OK'

@app.route("/classify-url", methods=["POST", "GET"])
def classify_url():
    if request.method == 'POST':
        url = request.form["url"]
        if url != None:
            response = requests.get(url)
            preds = model_predict(response.content)
            return preds
    return 'OK'


if __name__ == '__main__':
    port = os.environ.get('PORT', 8008)

    if "prepare" not in sys.argv:
        app.run(debug=False, host='0.0.0.0', port=port)

'''

python flask deep-learning web-deployment fast-ai
1个回答
0
投票

您的代码正在计算机的根目录中搜索文件,该目录不在您的文件所在的位置。它在某个文件夹中,这就是为什么找不到文件的原因。

更改路径变量自

PATH_TO_MODELS_DIR = Path('')

to

PATH_TO_MODELS_DIR = Path('.')

它将在当前工作目录中搜索您的文件夹模型和文件model_best.pth。

© www.soinside.com 2019 - 2024. All rights reserved.