在终端中运行Python并获取ValueError

在终端中运行Python并获取ValueError,python,python-3.x,terminal,librosa,Python,Python 3.x,Terminal,Librosa,试图从终端运行此python代码,但我收到此错误。现在发生的事情是,我正试图找到/使用一种方法,利用librosa库根据谱图对音乐进行分类 $python3 get\u genre.py../test.mp3 Traceback (most recent call last): File "get_genre.py", line 61, in <module> main(sys.argv[1:]) File "get_genre.py", line 50, in ma

试图从终端运行此python代码,但我收到此错误。现在发生的事情是,我正试图找到/使用一种方法,利用librosa库根据谱图对音乐进行分类

$python3 get\u genre.py../test.mp3

Traceback (most recent call last):
  File "get_genre.py", line 61, in <module>
    main(sys.argv[1:])
  File "get_genre.py", line 50, in main
    pred_genre              = le.inverse_transform(pred_index)
  File "/Users/nico/opt/anaconda3/lib/python3.7/site-packages/sklearn/preprocessing/label.py", line 273, in inverse_transform
    y = column_or_1d(y, warn=True)
  File "/Users/nico/opt/anaconda3/lib/python3.7/site-packages/sklearn/utils/validation.py", line 760, in column_or_1d
    raise ValueError("bad input shape {0}".format(shape))
ValueError: bad input shape ()

由于代码对我有效,我可以查明
ValueError
的原因

Python抛出该错误是因为该文件不存在,这意味着您的程序没有从父目录读取的访问权限

test.mp3
复制到
src
目录中,然后运行
python3 get\u genre.py test.mp3
,它就会工作

import numpy as np
import torch
import sys

from collections import Counter
from sklearn.preprocessing import LabelEncoder

from librosa.core import load
from librosa.feature import melspectrogram
from librosa import power_to_db

from model import genreNet
from config import MODELPATH
from config import GENRES

import warnings
warnings.filterwarnings("ignore")


def main(argv):

    if len(argv) != 1:
        print("Usage: python3 get_genre.py audiopath")
        exit()

    le = LabelEncoder().fit(GENRES)
    # ------------------------------- #
    ## LOAD TRAINED GENRENET MODEL
    net         = genreNet()
    net.load_state_dict(torch.load(MODELPATH, map_location='cpu'))
    # ------------------------------- #
    ## LOAD AUDIO
    audio_path  = argv[0]
    y, sr       = load(audio_path, mono=True, sr=22050)
    # ------------------------------- #
    ## GET CHUNKS OF AUDIO SPECTROGRAMS
    S           = melspectrogram(y, sr).T
    S           = S[:-1 * (S.shape[0] % 128)]
    num_chunk   = S.shape[0] / 128
    data_chunks = np.split(S, num_chunk)
    # ------------------------------- #
    ## CLASSIFY SPECTROGRAMS
    genres = list()
    for i, data in enumerate(data_chunks):
        data    = torch.FloatTensor(data).view(1, 1, 128, 128)
        preds   = net(data)
        pred_val, pred_index    = preds.max(1)
        pred_index              = pred_index.data.numpy()[0]
        pred_val                = np.exp(pred_val.data.numpy()[0])
        pred_genre              = le.inverse_transform(pred_index)
        if pred_val >= 0.5:
            genres.append(pred_genre)
    # ------------------------------- #
    s           = float(sum([v for k,v in dict(Counter(genres)).items()]))
    pos_genre   = sorted([(k, v/s*100 ) for k,v in dict(Counter(genres)).items()], key=lambda x:x[1], reverse=True)
    for genre, pos in pos_genre:
        print("%10s: \t%.2f\t%%" % (genre, pos))
    return

if __name__ == '__main__':
    main(sys.argv[1:])