#tensorflow #machine-learning #keras #lstm #spectrogram
#tensorflow #машинное обучение #keras #lstm #спектрограмма
Вопрос:
У меня есть массив numpy в форме, n x t x f
где n — количество спектрограмм, t — временные выборки и f — частотные выборки.
Это код:
print(train.shape) # this would print (4431,399,101)
inputs = Input(shape=(399, 101))
encoded = LSTM(50,
activation="relu",
return_sequences=True)(inputs)
encoded = LSTM(25,
activation="relu",
return_sequences=False)(encoded)
decoded = RepeatVector(399)(encoded)
decoded = LSTM(50,
activation="relu",
return_sequences=True)(decoded)
decoded = LSTM(25,
return_sequences=True)(decoded)
autoencoder = Model(inputs, decoded)
encoder = Model(inputs, encoded)
autoencoder.compile(optimizer='adam',
loss='mse',
metrics=['acc'])
autoencoder.fit(train, train_labels, epochs=20, batch_size=32)
Это вызывает:
Ошибка InvalidArgumentError: несовместимые формы: [32,399,101] против [32,1]
[[node gradient_tape/mean_squared_error/BroadcastGradientArgs (определено в :1) ]] [Op:__вывод_поезд_функция_7304]
Я полагаю, что ошибка во входной форме, но я не понимаю причины.
Ответ №1:
Ваш ввод модели предполагает двумерный массив, а ваш входной массив отражает три измерения. Я думаю.
Комментарии:
1. Модели LSTM нуждаются в 3D-вводе (batch_size, time_samples, features). Размер пакета задается подходящей моделью, которая в основном представляет собой количество спектрограмм (обучающих выборок), используемых на одной итерации обучения, временные выборки составляют 399, а затем частоту следует рассматривать как характеристики. Так что я действительно не понимаю, что происходит не так
2. к сожалению, не изучая данные, начиная с импорта входных данных и завершая рабочий процесс, я не могу комментировать.
3. Я загрузил уменьшенную версию набора данных (первые десять образцов) на диске: ссылка . Он может быть загружен как поезд, чтобы иметь тот же эффект. Что касается меток, вы можете просто выполнить train_labels=np.array(диапазон (10))