Я выбиваю модель NN в качестве новички на Pytorch и получаю следующее сообщение об ошибке, когда моя модель делает вызов в функцию встраивания факела: < /p>
Traceback (most recent call last):
File "/home/martin/.config/JetBrains/PyCharm2024.3/scratches/nussl_FullModelImplementation.py", line 130, in
output = model(item)
^^^^^^^^^^^
File "/home/martin/.config/JetBrains/PyCharm2024.3/scratches/nussl_FullModelImplementation.py", line 30, in forward
mask = self.embedding(data)
^^^^^^^^^^^^^^^^^^^^
File "/home/martin/anaconda3/envs/PythonProject/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1739, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/martin/anaconda3/envs/PythonProject/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1750, in _call_impl
return forward_call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/martin/anaconda3/envs/PythonProject/lib/python3.11/site-packages/nussl/ml/networks/modules/blocks.py", line 412, in forward
data = self.linear(data)
^^^^^^^^^^^^^^^^^
File "/home/martin/anaconda3/envs/PythonProject/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1739, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/martin/anaconda3/envs/PythonProject/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1750, in _call_impl
return forward_call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/martin/anaconda3/envs/PythonProject/lib/python3.11/site-packages/torch/nn/modules/linear.py", line 125, in forward
return F.linear(input, self.weight, self.bias)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: mat1 and mat2 shapes cannot be multiplied (1724x100 and 50x257)
< /code>
Моя модель в настоящее время построена как эта, я следую инстанцирации нейронной сети для разделения источников, и я выполняю шаги, как они объясняются на их веб -странице < /p>
class MaskInference(nn.Module):
def __init__(self, num_features, num_audio_channels, hidden_size,
num_layers, bidirectional, dropout, num_sources,
activation='sigmoid'):
super().__init__()
self.amplitude_to_db = AmplitudeToDB()
self.input_normalization = BatchNorm(num_features)
self.recurrent_stack = RecurrentStack(
num_features*num_audio_channels,hidden_size,
num_layers,bool(bidirectional),dropout
)
self.embedding = Embedding(num_features,hidden_size,
num_sources,activation,
num_audio_channels)
def forward(self,data):
mix_magnitude = data
data = self.amplitude_to_db(mix_magnitude)
data = self.input_normalization(data)
data = self.recurrent_stack(data)
mask = self.embedding(data)
estimates = mix_magnitude.unsqueeze(-1) * mask
output = {
'mask' : mask,
'estimates' : estimates
}
return output
@classmethod
def build(cls, num_features, num_audio_channels, hidden_size,
num_layers, bidirectional, dropout, num_sources,
activation='sigmoid'):
# Step 1. Register our model with nussl
nussl.ml.register_module(cls)
# Step 2a: Define the building blocks.
modules = {
'model': {
'class': 'MaskInference',
'args': {
'num_features': num_features,
'num_audio_channels': num_audio_channels,
'hidden_size': hidden_size,
'num_layers': num_layers,
'bidirectional': bidirectional,
'dropout': dropout,
'num_sources': num_sources,
'activation': activation
}
}
}
# Step 2b: Define the connections between input and output.
# Here, the mix_magnitude key is the only input to the model.
connections = [
['model', ['mix_magnitude']]
]
# Step 2c. The model outputs a dictionary, which SeparationModel will
# change the keys to model:mask, model:estimates. The lines below
# alias model:mask to just mask, and model:estimates to estimates.
# This will be important later when we actually deploy our model.
for key in ['mask', 'estimates']:
modules[key] = {'class': 'Alias'}
connections.append([key, f'model:{key}'])
# Step 2d. There are two outputs from our SeparationModel: estimates and mask.
# Then put it all together.
output = ['estimates', 'mask', ]
config = {
'name': cls.__name__,
'modules': modules,
'connections': connections,
'output': output
}
# Step 3. Instantiate the model as a SeparationModel.
return nussl.ml.SeparationModel(config)
def getTransformedData():
data.prepare_musdb('~/.nussl/tutorial/')
stft_params = nussl.STFTParams(window_length=512 , hop_length= 128 , window_type= 'sqrt_hann')
fg_path = "~/.nussl/tutorial/train"
train_data = data.on_the_fly(stft_params, transform=None, fg_path=fg_path, num_mixtures=1000, coherent_prob=1.0)
fg_path = "~/.nussl/tutorial/valid"
val_data = data.on_the_fly(stft_params, transform=None, fg_path=fg_path, num_mixtures=500)
fg_path = "~/.nussl/tutorial/test"
test_data = data.on_the_fly(stft_params, transform=None, fg_path=fg_path, num_mixtures=100)
item = train_data[0]
tfm = nussl_tfm.Compose([
nussl_tfm.SumSources([['bass', 'drums', 'other']]),
nussl_tfm.MagnitudeSpectrumApproximation(),
nussl_tfm.IndexSources('source_magnitudes', 1),
nussl_tfm.ToSeparationModel(),
])
item = tfm(item)
fg_path = "~/.nussl/tutorial/train"
train_data = data.on_the_fly(stft_params, transform=tfm, fg_path=fg_path, num_mixtures=1000, coherent_prob=1.0)
return train_data
stft_params = nussl.STFTParams(window_length=512 , hop_length= 128 , window_type= 'sqrt_hann')
nf = stft_params.window_length // 2 + 1
nac = 1
model = MaskInference.build(nf, nac, 50, 2, True, 0.3, 1, 'sigmoid')
item = getTransformedData()[0]
for key in item:
if torch.is_tensor(item[key]):
item[key] = item[key].float().unsqueeze(0)
output = model(item)
for key in output:
print(key, type(output[key]), output[key].shape)
Подробнее здесь: https://stackoverflow.com/questions/795 ... 1-mat2-sha
Pytorch RuntimeError при создании модели NN из учебника ISMIR: формы MAT1 и MAT2 не могут быть умножены ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Неправильная форма на полностью связанном слое: формы mat1 и mat2 не могут быть умножены.
Anonymous » » в форуме Python - 0 Ответы
- 44 Просмотры
-
Последнее сообщение Anonymous
-