从头开始训练 huggingface 的 GPT2:assert n_state % config.n_head == 0 error
Train huggingface's GPT2 from scratch : assert n_state % config.n_head == 0 error
我正在尝试将 GPT2 架构用于音乐应用程序,因此需要从头开始对其进行训练。经过一番谷歌搜索后,我发现来自 huggingface 的 github 的问题 #1714 已经有 "solved" 这个问题。当我尝试 运行 提议的解决方案时:
from transformers import GPT2Config, GPT2Model
NUMLAYER = 4
NUMHEAD = 4
SIZEREDUCTION = 10 #the factor by which we reduce the size of the velocity argument.
VELSIZE = int(np.floor(127/SIZEREDUCTION)) + 1
SEQLEN=40 #size of data sequences.
EMBEDSIZE = 5
config = GPT2Config(vocab_size = VELSIZE, n_positions = SEQLEN, n_embd = EMBEDSIZE, n_layer = NUMLAYER, n_ctx = SEQLEN, n_head = NUMHEAD)
model = GPT2Model(config)
我收到以下错误:
Traceback (most recent call last):
File "<ipython-input-7-b043a7a2425f>", line 1, in <module>
runfile('C:/Users/cnelias/Desktop/PHD/Swing project/code/script/GPT2.py', wdir='C:/Users/cnelias/Desktop/PHD/Swing project/code/script')
File "C:\Users\cnelias\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 786, in runfile
execfile(filename, namespace)
File "C:\Users\cnelias\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/cnelias/Desktop/PHD/Swing project/code/script/GPT2.py", line 191, in <module>
model = GPT2Model(config)
File "C:\Users\cnelias\Anaconda3\lib\site-packages\transformers\modeling_gpt2.py", line 355, in __init__
self.h = nn.ModuleList([Block(config.n_ctx, config, scale=True) for _ in range(config.n_layer)])
File "C:\Users\cnelias\Anaconda3\lib\site-packages\transformers\modeling_gpt2.py", line 355, in <listcomp>
self.h = nn.ModuleList([Block(config.n_ctx, config, scale=True) for _ in range(config.n_layer)])
File "C:\Users\cnelias\Anaconda3\lib\site-packages\transformers\modeling_gpt2.py", line 223, in __init__
self.attn = Attention(nx, n_ctx, config, scale)
File "C:\Users\cnelias\Anaconda3\lib\site-packages\transformers\modeling_gpt2.py", line 109, in __init__
assert n_state % config.n_head == 0
这是什么意思,我该如何解决?
此外,是否有关于如何使用 GPT2 进行前向调用的文档?我可以定义自己的 train()
函数还是必须使用模型的内置函数?我是被迫使用 Dataset
来进行训练还是可以为它提供单独的张量?
我找过它,但在文档中找不到这些问题的答案,但也许我遗漏了什么。
PS : 我已经阅读了 huggingface.co 的博文,但它省略了太多对我的应用程序有用的信息和细节。
我认为错误信息很清楚:
assert n_state % config.n_head == 0
通过the code回溯,我们可以看到
n_state = nx # in Attention: n_state=768
表示n_state
表示嵌入维度(在类BERT模型中一般默认为768)。当我们查看 GPT-2 documentation 时,指定它的参数似乎是 n_embd
,而您正在将其设置为 5
。如错误所示,嵌入维度 必须能被指定为 4
的注意力头数 整除。因此,选择不同的嵌入维度作为 4
的倍数应该可以解决问题。当然你也可以改变heads开头的个数,不过貌似不支持奇数embedding维数。
我正在尝试将 GPT2 架构用于音乐应用程序,因此需要从头开始对其进行训练。经过一番谷歌搜索后,我发现来自 huggingface 的 github 的问题 #1714 已经有 "solved" 这个问题。当我尝试 运行 提议的解决方案时:
from transformers import GPT2Config, GPT2Model
NUMLAYER = 4
NUMHEAD = 4
SIZEREDUCTION = 10 #the factor by which we reduce the size of the velocity argument.
VELSIZE = int(np.floor(127/SIZEREDUCTION)) + 1
SEQLEN=40 #size of data sequences.
EMBEDSIZE = 5
config = GPT2Config(vocab_size = VELSIZE, n_positions = SEQLEN, n_embd = EMBEDSIZE, n_layer = NUMLAYER, n_ctx = SEQLEN, n_head = NUMHEAD)
model = GPT2Model(config)
我收到以下错误:
Traceback (most recent call last):
File "<ipython-input-7-b043a7a2425f>", line 1, in <module>
runfile('C:/Users/cnelias/Desktop/PHD/Swing project/code/script/GPT2.py', wdir='C:/Users/cnelias/Desktop/PHD/Swing project/code/script')
File "C:\Users\cnelias\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 786, in runfile
execfile(filename, namespace)
File "C:\Users\cnelias\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/cnelias/Desktop/PHD/Swing project/code/script/GPT2.py", line 191, in <module>
model = GPT2Model(config)
File "C:\Users\cnelias\Anaconda3\lib\site-packages\transformers\modeling_gpt2.py", line 355, in __init__
self.h = nn.ModuleList([Block(config.n_ctx, config, scale=True) for _ in range(config.n_layer)])
File "C:\Users\cnelias\Anaconda3\lib\site-packages\transformers\modeling_gpt2.py", line 355, in <listcomp>
self.h = nn.ModuleList([Block(config.n_ctx, config, scale=True) for _ in range(config.n_layer)])
File "C:\Users\cnelias\Anaconda3\lib\site-packages\transformers\modeling_gpt2.py", line 223, in __init__
self.attn = Attention(nx, n_ctx, config, scale)
File "C:\Users\cnelias\Anaconda3\lib\site-packages\transformers\modeling_gpt2.py", line 109, in __init__
assert n_state % config.n_head == 0
这是什么意思,我该如何解决?
此外,是否有关于如何使用 GPT2 进行前向调用的文档?我可以定义自己的 train()
函数还是必须使用模型的内置函数?我是被迫使用 Dataset
来进行训练还是可以为它提供单独的张量?
我找过它,但在文档中找不到这些问题的答案,但也许我遗漏了什么。
PS : 我已经阅读了 huggingface.co 的博文,但它省略了太多对我的应用程序有用的信息和细节。
我认为错误信息很清楚:
assert n_state % config.n_head == 0
通过the code回溯,我们可以看到
n_state = nx # in Attention: n_state=768
表示n_state
表示嵌入维度(在类BERT模型中一般默认为768)。当我们查看 GPT-2 documentation 时,指定它的参数似乎是 n_embd
,而您正在将其设置为 5
。如错误所示,嵌入维度 必须能被指定为 4
的注意力头数 整除。因此,选择不同的嵌入维度作为 4
的倍数应该可以解决问题。当然你也可以改变heads开头的个数,不过貌似不支持奇数embedding维数。