Ошибка в музыкальном анализе нейронной сети Python Keras Librosa: неизвестная переменная в импорте Scikit
Недавно я пытался завершить эксперимент, в соответствии с которым с помощью Keras создается программа анализа музыки в нейронной сети, а количество слоев в нейронной сети изменяется, чтобы найти влияние на производительность. Мой источник для программы - веб-сайт ниже:
Недавно я уже сталкивался с несколькими ошибками, связанными с моей программой, и по совету другого разработчика по переполнению стека решил заручиться поддержкой раздела библиотеки Scikit.
Код показан здесь:
import librosa
import librosa.feature
import librosa.display
import glob
import numpy as np
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.utils.np_utils import to_categorical
from sklearn.model_selection import train_test_split,
StratifiedShuffleSplit, StratifiedKFold
def display_mfcc(song):
y, _ = librosa.load(song)
mfcc = librosa.feature.mfcc(y)
plt.figure(figsize=(10, 4))
librosa.display.specshow(mfcc, x_axis='time', y_axis='mel')
plt.colorbar()
plt.title(song)
plt.tight_layout()
plt.show()
def extract_features_song(f):
y, _ = librosa.load(f)
mfcc = librosa.feature.mfcc(y)
mfcc /= np.amax(np.absolute(mfcc))
return np.ndarray.flatten(mfcc)[:25000]
def generate_features_and_labels():
all_features = []
all_labels = []
genres = ['blues', 'classical', 'country', 'disco', 'hiphop',
'jazz', 'metal', 'pop', 'reggae', 'rock']
for genre in genres:
sound_files = glob.glob('genres/'+genre+'/*.au')
print('Processing %d songs in %s genre...' %
(len(sound_files), genre))
for f in sound_files:
features = extract_features_song(f)
all_features.append(features)
all_labels.append(genre)
label_uniq_ids, label_row_ids = np.unique(all_labels,
return_inverse=True)
label_row_ids = label_row_ids.astype(np.int32, copy=False)
onehot_labels = to_categorical(label_row_ids,
len(label_uniq_ids))
return np.stack(all_features), onehot_labels
features, labels = generate_features_and_labels()
print(np.shape(features))
print(np.shape(labels))
training_split = 0.8
alldata = np.column_stack((features, labels))
sss = StratifiedShuffleSplit(n_splits=1, test_size=0.20,
random_state=37)
for train_index, test_index in sss.split(X, y):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
print(np.shape(train))
print(np.shape(test))
train_input = test[:,:-10]
train_labels = train[:,-10:]
test_input = test[:,:-10]
test_labels = test[:,-10:]
print(np.shape(train_input))
print(np.shape(train_labels))
model = Sequential([
Dense(100, input_dim=np.shape(train_input)[1]),
Activation('relu'),
Dense(10),
Activation('softmax'),
])
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
print(model.summary())
model.fit(train_input, train_labels, epochs=10, batch_size=32,
validation_split=0.2)
loss, acc = model.evaluate(test_input, test_labels, batch_size=32)
print('Done!')
print('Loss: %.4f, accuracy: %.4f' % (loss, acc))
Python начал давать ожидаемый ответ, производя:
Processing 100 songs in blues genre...
Processing 100 songs in classical genre...
Processing 100 songs in country genre...
Processing 100 songs in disco genre...
Processing 100 songs in hiphop genre...
Processing 100 songs in jazz genre...
Processing 100 songs in metal genre...
Processing 100 songs in pop genre...
Processing 100 songs in reggae genre...
Processing 100 songs in rock genre...
(1000, 25000)
(1000, 10)
Но прервал процесс и отобразил это сообщение об ошибке:
Traceback (most recent call last):
File "/Users/surengrigorian/Documents/Stage1.py", line 60, in <module>
for train_index, test_index in sss.split(X, y):
NameError: name 'X' is not defined
Спасибо за любую помощь, которую вы можете предоставить по этому вопросу.
1 ответ
X и y не определены в вашем коде, я считаю, что в вашем случае X равен признакам, а Y равен меткам
X=features
y=labels
for train_index, test_index in sss.split(X, y):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
Надеюсь, поможет