之前的问题我自己解决了,就是在文本里少打了个空格。
现在到最后一步了,又出现一个问题,我用MockingBird社区分享的模型训练报错,提示我模型和代码版本不一致,我该怎么修改版本?
这是模型名字,名字可能就是版本:pretrained-11-7-21_75k.pt
还有,我想用GPU训练,但是现在默认是CPU训练
Microsoft Windows [版本 10.0.19045.2965]
(c) Microsoft Corporation。保留所有权利。
H:\MockingBird>python pre.py H:\制作数据集 -d aidatatang_200zh -n 7
Using data from:
H:\制作数据集\aidatatang_200zh\corpus\train
aidatatang_200zh: 100%|████████████████████████████████████████████████████████████| 1/1 [00:48<00:00, 48.27s/speakers]
The dataset consists of 283 utterances, 70584 mel frames, 14084160 audio timesteps (0.24 hours).
Max input length (text chars): 226
Max mel frames length: 833
Max audio timesteps length: 166560
Embedding: 0%| | 0/283 [00:00<?, ?utterances/s]Loaded encoder "pretrained.pt" trained to step 1594501
Embedding: 100%|█████████████████████████████████████████████████████████████| 283/283 [00:09<00:00, 29.04utterances/s]
H:\MockingBird>python synthesizer_train.py xiyuetest H:\制作数据集\SV2TTS\synthesizer
Arguments:
run_id: xiyuetest
syn_dir: H:\制作数据集\SV2TTS\synthesizer
models_dir: synthesizer/saved_models/
save_every: 1000
backup_every: 25000
log_every: 200
force_restart: False
hparams:
Checkpoint path: synthesizer\saved_models\xiyuetest\xiyuetest.pt
Loading training data from: H:\制作数据集\SV2TTS\synthesizer\train.txt
Using model: Tacotron
Using device: cpu
Initialising Tacotron Model...
Trainable Parameters: 32.869M
Loading weights at synthesizer\saved_models\xiyuetest\xiyuetest.pt
Tacotron weights loaded from step 75000
Using inputs from:
H:\制作数据集\SV2TTS\synthesizer\train.txt
H:\制作数据集\SV2TTS\synthesizer\mels
H:\制作数据集\SV2TTS\synthesizer\embeds
Found 283 samples
+----------------+------------+---------------+------------------+
| Steps with r=2 | Batch Size | Learning Rate | Outputs/Step (r) |
+----------------+------------+---------------+------------------+
| 85k Steps | 12 | 5e-06 | 2 |
+----------------+------------+---------------+------------------+
H:\MockingBird\synthesizer\synthesizer_dataset.py:84: UserWarning: Creating a tensor from a list of numpy.ndarrays is extremely slow. Please consider converting the list to a single numpy.ndarray with numpy.array() before converting to a tensor. (Triggered internally at ..\torch\csrc\utils\tensor_new.cpp:248.)
embeds = torch.tensor(embeds)
H:\MockingBird\synthesizer\synthesizer_dataset.py:84: UserWarning: Creating a tensor from a list of numpy.ndarrays is extremely slow. Please consider converting the list to a single numpy.ndarray with numpy.array() before converting to a tensor. (Triggered internally at ..\torch\csrc\utils\tensor_new.cpp:248.)
embeds = torch.tensor(embeds)
Traceback (most recent call last):
File "H:\MockingBird\synthesizer_train.py", line 37, in <module>
train(**vars(args))
File "H:\MockingBird\synthesizer\train.py", line 208, in train
optimizer.step()
File "C:\Users\Administrator.DESKTOP-6GOULRD\AppData\Local\Programs\Python\Python310\lib\site-packages\torch\optim\optimizer.py", line 280, in wrapper
out = func(*args, **kwargs)
File "C:\Users\Administrator.DESKTOP-6GOULRD\AppData\Local\Programs\Python\Python310\lib\site-packages\torch\optim\optimizer.py", line 33, in _use_grad
ret = func(self, *args, **kwargs)
File "C:\Users\Administrator.DESKTOP-6GOULRD\AppData\Local\Programs\Python\Python310\lib\site-packages\torch\optim\adam.py", line 141, in step
adam(
File "C:\Users\Administrator.DESKTOP-6GOULRD\AppData\Local\Programs\Python\Python310\lib\site-packages\torch\optim\adam.py", line 281, in adam
func(params,
File "C:\Users\Administrator.DESKTOP-6GOULRD\AppData\Local\Programs\Python\Python310\lib\site-packages\torch\optim\adam.py", line 344, in _single_tensor_adam
exp_avg.mul_(beta1).add_(grad, alpha=1 - beta1)
RuntimeError: The size of tensor a (1024) must match the size of tensor b (3) at non-singleton dimension 3
H:\MockingBird>
引用chatgpt部分指引作答:
根据你提供的信息,错误是在执行预处理脚本(pre.py)时出现的。错误信息表明在计算最大输入长度时出现了问题,因为max()函数的参数是一个空序列。
错误发生在preprocess.py文件的第88行,这是在计算文本的最大长度。根据代码,该错误是因为metadata列表为空导致的。metadata是从文件中读取的音频文件的元数据列表。
要解决这个问题,你可以检查以下几个方面:
1 确保你提供的音频文件路径(H:\制作数据集\aidatatang_200zh\corpus\train\xy)中的音频文件存在,并且文件名与transcript文件中的音频文件名一致。
2 确保你提供的文本文件路径(H:\制作数据集\aidatatang_200zh\transcript\aidatatang_200_zh_transcript.txt)中的文本文件存在,并且格式正确。
3 确保文本文件中的每一行都包含正确的格式,例如"文件名+空格+文本"。
4 检查aidatatang_200_zh_transcript.txt文件是否使用UTF-8编码保存。
如果仍然遇到问题,建议逐行调试代码并输出相关变量的值,以确定问题出现的具体位置和原因。这样有助于进一步排除问题并解决错误。
你可以把txt文档里的内容截图出来看看
把电脑关了,在纸上复原你的流程,或许能找出问题所在。或是找朋友讲述你的思路,一定有什么发现。
前几天我的回答被抄袭,我与50元失之交臂,今天这100多元肯定与我无关了。回答问题,完全是业余爱好,与钱无关
学编程要会调试,不要靠猜
先看报错信息,说max函数里面传入的是个空列表
那么说明len(m[5]) for m in metadata这个表达式返回的是空列表
进一步说明metadata本身是个空list
往前一步一步查,断点或者print,看到底从哪一步开始就跟你的预期不符了
这个问题是打印list 的最大值出现的问题,最后发现是打印的list 的为空了
修改了位置,本来list 的内容不是空的,
比如
这个错误通常是因为你传递给 max() 函数的参数为空序列,例如一个空列表或空元组。
你需要确保在调用 max() 函数时传递非空序列。如果你不确定序列是否为空,可以使用 if 语句检查它并在序列非空时再执行 max() 函数。
以下是一个示例代码:
复制
my_list = [1, 2, 3]
if my_list:
max_value = max(my_list)
print(max_value)
else:
print("List is empty")
在上面的代码中,我们首先检查 my_list 是否为空,如果不为空,则调用 max() 函数获取最大值。否则,打印出列表为空的信息。
根据你的报错猜测 目前你在 H:\制作数据集\aidatatang_200zh\corpus\train\
下放置一个空文件,导致preprocess_speaker_general返回no Words
,我猜这里面应该需要填充训练数据,不太清楚你是从哪里拷贝的代码,需要更多信息来推测这个文件夹用途。最后导致metadata
是个空列表,然后抛出了最后一个错误。
看代码逻辑,H:\制作数据集\aidatatang_200zh\transcript/aidatatang_200_zh_transcript.txt
里应该放置一些配置,每一行按照key val
这种形式,很明显你乱写了一些话放进去肯定不对。
python调试三板斧 https://ask.csdn.net/questions/7908322/54130133
从你给出的错误信息来看,这是一个维度不匹配的问题。在进行张量运算时,你尝试将两个维度不同的张量进行运算,这是不允许的。
问题发生在exp_avg.mul_(beta1).add_(grad, alpha=1 - beta1)这行代码上,exp_avg张量的大小是(1024),而grad张量的大小是(3),在第3个非单一维度上他们的大小不匹配。exp_avg和grad应该是对应同一个模型参数的梯度和梯度的移动平均值,因此他们应该有相同的维度。
关于你的问题,这是我能提供的一些建议:
至于使用GPU进行训练,你需要在你的代码中指定使用GPU。在PyTorch中,你可以通过torch.device('cuda')来创建一个GPU设备对象,然后在创建tensor或者模型时,通过.to(device)方法将它们移动到GPU上。例如:
python
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = MyModel().to(device)
注意,只有当你的系统中安装了CUDA,并且PyTorch版本支持GPU时,上述代码才能正确运行。否则,你可能需要安装CUDA并更新你的PyTorch版本。
最后,模型和代码版本不一致的问题,可能是因为你的模型是用一个版本的代码训练出来的,而你现在使用的代码版本有所不同,导致模型参数的结构或者名称发生了改变。这种情况下,你需要找到与模型匹配的代码版本,或者手动调整代码以适应模型的参数结构。