繁体   English   中英

PyTorch 数据集:并行读取多个音频文件错误 Can't get attribute 'AudioDataset' on

[英]PyTorch Dataset: Read multiple audio files in parallel error Can't get attribute 'AudioDataset' on <module '__main__' (built-in)

我正在尝试创建一个 PyTorch Dataset来读取两个音频文件作为特征。 该代码旨在采用两个音频路径并对其进行预处理并返回频谱图、特征等,这需要花费大量时间。 在创建数据集时,900 个文件需要大约 15 分钟的时间,尽管数据集很小,但我有很好的可用内存。 有没有办法,我可以使用并行性或任何其他方法来提高其性能?

class AudioDataset(Dataset):

    def __init__(self, paths_list, targets, preprocess=preprocess_fn):

        self.preprocess = preprocess
        self.features = []
        self.labels = []
        self.paths_list = paths_list
        
        self.targets = targets
        self._init_dataset()
        
    
    def _init_dataset(self):
        
#         paths_list, targets
        try:
            for p, target in tqdm(zip(self.paths_list, self.targets)):
                audio_1 = self.preprocess(p[0])
                audio_2 = self.preprocess(p[1])
                self.features.append([audio_1, audio_2])
                self.labels.append(target)
        
        except ValueError as e:
            print(f"Error occured at {e}")

            
#         self.transform = transform

    def __len__(self):
        return len(self.features)

    def __getitem__(self, idx):
        sample = self.features[idx]
        label = self.labels[idx]
        return sample, label

尝试使用 DataLoader 并设置工人数 = 10,但会引发错误

[00:00<?, ?it/s]Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/cm/local/apps/python37/lib/python3.7/multiprocessing/spawn.py", line 105, in spawn_main
    exitcode = _main(fd)
  File "/cm/local/apps/python37/lib/python3.7/multiprocessing/spawn.py", line 115, in _main
    self = reduction.pickle.load(from_parent)
AttributeError: Can't get attribute 'AudioDataset' on <module '__main__' (built-in)>

该代码无需多个工作人员即可工作。 有没有办法让我把它排序? 谢谢,

为了提高加载速度,您应该考虑将特征保存到 .pt 文件中,并设计一个不同的数据集和加载器来从 .pt 文件中读取特征。 这叫做迁移学习。 你可以谷歌一下。 对于错误,我想我需要有关代码和堆栈跟踪的更多信息。

Unpickling saved pytorch model 抛出 AttributeError: Can't get attribute 'Net' on <module '__main__' despite adding class definition inline< div><div id="text_translate"><p> 我正在尝试在 flask 应用程序中提供 pytorch model。 当我早些时候在 jupyter notebook 上运行这段代码时,这段代码是有效的,但现在我在虚拟环境中运行它,显然它无法获得属性“Net”,即使 class 定义就在那里。 所有其他类似的问题告诉我在同一个脚本中添加保存的 model 的 class 定义。 但它仍然不起作用。 火炬版本是 1.0.1(保存的 model 和 virtualenv 都经过训练)我做错了什么? 这是我的代码。</p><pre> import os import numpy as np from flask import Flask, request, jsonify import requests import torch from torch import nn from torch.nn import functional as F MODEL_URL = 'https://storage.googleapis.com/judy-pytorch-model/classifier.pt' r = requests.get(MODEL_URL) file = open("model.pth", "wb") file.write(r.content) file.close() class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = nn.Linear(input_size, hidden_size) self.fc2 = nn.Linear(hidden_size, hidden_size) self.fc3 = nn.Linear(hidden_size, output_size) def forward(self, x): x = torch.sigmoid(self.fc1(x)) x = torch.sigmoid(self.fc2(x)) x = self.fc3(x) return F.log_softmax(x, dim=-1) model = torch.load('model.pth') app = Flask(__name__) @app.route("/") def hello(): return "Binary classification example\n" @app.route('/predict', methods=['GET']) def predict(): x_data = request.args['x_data'] x_data = x_data.split() x_data = list(map(float, x_data)) sample = np.array(x_data) sample_tensor = torch.from_numpy(sample).float() out = model(sample_tensor) _, predicted = torch.max(out.data, -1) if predicted.item() == 0: pred_class = "Has no liver damage - ", predicted.item() elif predicted.item() == 1: pred_class = "Has liver damage - ", predicted.item() return jsonify(pred_class)</pre><p> 这是完整的回溯:</p><pre> Traceback (most recent call last): File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/bin/flask", line 10, in <module> sys.exit(main()) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/flask/cli.py", line 894, in main cli.main(args=args, prog_name=name) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/flask/cli.py", line 557, in main return super(FlaskGroup, self).main(*args, **kwargs) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/click/core.py", line 717, in main rv = self.invoke(ctx) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/click/core.py", line 1137, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/click/core.py", line 956, in invoke return ctx.invoke(self.callback, **ctx.params) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/click/core.py", line 555, in invoke return callback(*args, **kwargs) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/click/decorators.py", line 64, in new_func return ctx.invoke(f, obj, *args, **kwargs) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/click/core.py", line 555, in invoke return callback(*args, **kwargs) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/flask/cli.py", line 767, in run_command app = DispatchingApp(info.load_app, use_eager_loading=eager_loading) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/flask/cli.py", line 293, in __init__ self._load_unlocked() File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/flask/cli.py", line 317, in _load_unlocked self._app = rv = self.loader() File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/flask/cli.py", line 372, in load_app app = locate_app(self, import_name, name) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/flask/cli.py", line 235, in locate_app __import__(module_name) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/app.py", line 34, in <module> model = torch.load('model.pth') File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/torch/serialization.py", line 368, in load return _load(f, map_location, pickle_module) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/torch/serialization.py", line 542, in _load result = unpickler.load() AttributeError: Can't get attribute 'Net' on <module '__main__' from '/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/bin/flask'></pre><p> <a href="https://stackoverflow.com/questions/42703500/best-way-to-save-a-trained-model-in-pytorch" rel="nofollow noreferrer">这</a>不能解决我的问题。 我不想改变我坚持 model 的方式。torch.save() 在虚拟环境之外对我来说工作得很好。 我不介意将 class 定义添加到脚本中。 尽管如此,我还是想看看是什么导致了错误。</p></div></module>

[英]Unpickling saved pytorch model throws AttributeError: Can't get attribute 'Net' on <module '__main__' despite adding class definition inline

AttributeError:无法获取属性“InsertNews” <module '__main__'< div><div id="text_translate"><p> 我正在尝试编写一个程序来抓取网站内容。 该脚本似乎运行了一段时间,但在几次迭代后停止</p><pre>Traceback (most recent call last): File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\util.py", line 300, in _run_finalizers finalizer() File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\util.py", line 224, in __call__ res = self._callback(*self._args, **self._kwargs) File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 581, in _terminate_pool cls._help_stuff_finish(inqueue, task_handler, len(pool)) File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 568, in _help_stuff_finish inqueue._reader.recv() File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\connection.py", line 251, in recv return _ForkingPickler.loads(buf.getbuffer()) AttributeError: Can't get attribute 'InsertNews' on &lt;module '__main__' from 'c:\\program files (x86)\\microsoft visual studio\\2019\\common7\\ide\\extensions\\microsoft\\python\\core\\debugpy\\__main__.py'&gt;</pre><p> 这是我要运行的脚本</p><pre>from boilerpy3 import extractors import pymongo import multiprocessing as mp def InsertNews(newsite, symbol): print(symbol) print(newsite) extractor = extractors.ArticleExtractor() try: content = extractor.get_content_from_url(newsite) except Exception: pass print(content) record={symbol,content} mydb["StocksPressRelease"].insert_one(record) if __name__ == "__main__": print("started") pool = mp.Pool(mp.cpu_count()) myclient = pymongo.MongoClient("mongodb+srv://un:pwd@cluster0.subkd.azure.mongodb.net/db?retryWrites=true&amp;w=majority&amp;connectTimeoutMS=900000") mydb = myclient["db"] mycol = mydb["Stocks"] for x in mycol.find({},{"_id": 0, "symbol":1, "newsite": 1 }): results = pool.apply_async(InsertNews,args=(x["newsite"],x["symbol"])) pool.close()</pre></div></module>

[英]AttributeError: Can't get attribute 'InsertNews' on <module '__main__'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 AttributeError:无法获取属性“video_dataset”<module '__main__' (built-in)></module> Python 多处理错误:AttributeError: Can't get attribute 'task' on<module '__main__' (built-in)> "</module> 图像分类中的并行处理<can't get attribute 'imcat' on <module 'main' (built-in)></can't> Unpickling saved pytorch model 抛出 AttributeError: Can't get attribute 'Net' on <module '__main__' despite adding class definition inline< div><div id="text_translate"><p> 我正在尝试在 flask 应用程序中提供 pytorch model。 当我早些时候在 jupyter notebook 上运行这段代码时,这段代码是有效的,但现在我在虚拟环境中运行它,显然它无法获得属性“Net”,即使 class 定义就在那里。 所有其他类似的问题告诉我在同一个脚本中添加保存的 model 的 class 定义。 但它仍然不起作用。 火炬版本是 1.0.1(保存的 model 和 virtualenv 都经过训练)我做错了什么? 这是我的代码。</p><pre> import os import numpy as np from flask import Flask, request, jsonify import requests import torch from torch import nn from torch.nn import functional as F MODEL_URL = 'https://storage.googleapis.com/judy-pytorch-model/classifier.pt' r = requests.get(MODEL_URL) file = open("model.pth", "wb") file.write(r.content) file.close() class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = nn.Linear(input_size, hidden_size) self.fc2 = nn.Linear(hidden_size, hidden_size) self.fc3 = nn.Linear(hidden_size, output_size) def forward(self, x): x = torch.sigmoid(self.fc1(x)) x = torch.sigmoid(self.fc2(x)) x = self.fc3(x) return F.log_softmax(x, dim=-1) model = torch.load('model.pth') app = Flask(__name__) @app.route("/") def hello(): return "Binary classification example\n" @app.route('/predict', methods=['GET']) def predict(): x_data = request.args['x_data'] x_data = x_data.split() x_data = list(map(float, x_data)) sample = np.array(x_data) sample_tensor = torch.from_numpy(sample).float() out = model(sample_tensor) _, predicted = torch.max(out.data, -1) if predicted.item() == 0: pred_class = "Has no liver damage - ", predicted.item() elif predicted.item() == 1: pred_class = "Has liver damage - ", predicted.item() return jsonify(pred_class)</pre><p> 这是完整的回溯:</p><pre> Traceback (most recent call last): File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/bin/flask", line 10, in <module> sys.exit(main()) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/flask/cli.py", line 894, in main cli.main(args=args, prog_name=name) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/flask/cli.py", line 557, in main return super(FlaskGroup, self).main(*args, **kwargs) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/click/core.py", line 717, in main rv = self.invoke(ctx) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/click/core.py", line 1137, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/click/core.py", line 956, in invoke return ctx.invoke(self.callback, **ctx.params) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/click/core.py", line 555, in invoke return callback(*args, **kwargs) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/click/decorators.py", line 64, in new_func return ctx.invoke(f, obj, *args, **kwargs) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/click/core.py", line 555, in invoke return callback(*args, **kwargs) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/flask/cli.py", line 767, in run_command app = DispatchingApp(info.load_app, use_eager_loading=eager_loading) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/flask/cli.py", line 293, in __init__ self._load_unlocked() File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/flask/cli.py", line 317, in _load_unlocked self._app = rv = self.loader() File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/flask/cli.py", line 372, in load_app app = locate_app(self, import_name, name) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/flask/cli.py", line 235, in locate_app __import__(module_name) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/app.py", line 34, in <module> model = torch.load('model.pth') File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/torch/serialization.py", line 368, in load return _load(f, map_location, pickle_module) File "/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/lib/python3.6/site-packages/torch/serialization.py", line 542, in _load result = unpickler.load() AttributeError: Can't get attribute 'Net' on <module '__main__' from '/Users/judyraj/Judy/pytorch-deployment/flask_app/liver_disease_finder/bin/flask'></pre><p> <a href="https://stackoverflow.com/questions/42703500/best-way-to-save-a-trained-model-in-pytorch" rel="nofollow noreferrer">这</a>不能解决我的问题。 我不想改变我坚持 model 的方式。torch.save() 在虚拟环境之外对我来说工作得很好。 我不介意将 class 定义添加到脚本中。 尽管如此,我还是想看看是什么导致了错误。</p></div></module> 无法从 airflow 获取模块 '__main__' 上的属性 'ClassName' 无法获取属性“MyScaler”<module '__main__'> AttributeError:无法获取属性“tokenizer”<module '__main__'> AttributeError:无法获取属性“DataFrameSelector”<module '__main__'></module> AttributeError:无法获取属性“InsertNews” <module '__main__'< div><div id="text_translate"><p> 我正在尝试编写一个程序来抓取网站内容。 该脚本似乎运行了一段时间,但在几次迭代后停止</p><pre>Traceback (most recent call last): File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\util.py", line 300, in _run_finalizers finalizer() File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\util.py", line 224, in __call__ res = self._callback(*self._args, **self._kwargs) File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 581, in _terminate_pool cls._help_stuff_finish(inqueue, task_handler, len(pool)) File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 568, in _help_stuff_finish inqueue._reader.recv() File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\connection.py", line 251, in recv return _ForkingPickler.loads(buf.getbuffer()) AttributeError: Can't get attribute 'InsertNews' on &lt;module '__main__' from 'c:\\program files (x86)\\microsoft visual studio\\2019\\common7\\ide\\extensions\\microsoft\\python\\core\\debugpy\\__main__.py'&gt;</pre><p> 这是我要运行的脚本</p><pre>from boilerpy3 import extractors import pymongo import multiprocessing as mp def InsertNews(newsite, symbol): print(symbol) print(newsite) extractor = extractors.ArticleExtractor() try: content = extractor.get_content_from_url(newsite) except Exception: pass print(content) record={symbol,content} mydb["StocksPressRelease"].insert_one(record) if __name__ == "__main__": print("started") pool = mp.Pool(mp.cpu_count()) myclient = pymongo.MongoClient("mongodb+srv://un:pwd@cluster0.subkd.azure.mongodb.net/db?retryWrites=true&amp;w=majority&amp;connectTimeoutMS=900000") mydb = myclient["db"] mycol = mydb["Stocks"] for x in mycol.find({},{"_id": 0, "symbol":1, "newsite": 1 }): results = pool.apply_async(InsertNews,args=(x["newsite"],x["symbol"])) pool.close()</pre></div></module> 多重处理错误“ AttributeError:无法获取属性&#39;testfuncxx&#39;
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM