簡體   English   中英

LSTM的多個功能,多個類別,多個輸出

[英]LSTM multiple features, multiple classes, multiple outputs

我正在嘗試使用LSTM分類器根據我擁有的一些midi生成音樂。

LSTM具有兩個功能,即音符的音高和音符的持續時間。

為了說明,我們認為我們有:

  • 螺距:[“ A”,“ B”,“ C”]

  • 持續時間:[“ 0.5”,“ 1”,“ 1.5”]

可以想象,生成的音符必須同時具有音高和持續時間。

我試圖用MultiLabelBinarizer做到這一點。

from sklearn.preprocessing import MultiLabelBinarizer
labels = [[x,y] for x in all_pitches for y in all_durations]

mlb = MultiLabelBinarizer()
mlb_value = mlb.fit_transform(labels)

這將按預期划分類,但是我遇到的問題是在預測時出現的。

prediction = model.predict_proba(prediction_input)

indexes = np.argsort(prediction, axis=None)[::-1]
index1 = indexes[0]
index2 = indexes[1]

result1 = mlb.classes_[index1]
result2 = mlb.classes_[index2]

我需要音符同時具有音高和持續時間,因此這種方法似乎對我不起作用(我只獲得相同的兩個音高)。

我認為的另一件事是使用MultiOutputClassifier ,但是我似乎無法理解它們的區別,或者如何正確地實際使用此MultiOutputClassifier

感謝您的耐心配合,並為您提出的可能是愚蠢的問題感到抱歉。

您可以將LSTM輸出提供給許多不同的層(通常是神經函數),從而導致不同的輸出,然后在這些輸出的每一個上同時訓練模型:

from keras.models import Model
from keras.layers import Input, Dense, LSTM

# function definitions
lstm_function = LSTM(..args)
pitch_function = Dense(num_pitches, activation='softmax')
duration_function = Dense(num_durations, activation='softmax')
input_features = Input(input_dimensionality)

# function applications
lstm_output = lstm_function(input_features)
pitches = pitch_function(lstm_output)
durations = duration_function(lstm_output)

# model 
model = Model(inputs=[input_features], outputs=[pitches, durations])
model.compile(loss=['categorical_crossentropy', 'mse'], optimizer='RMSProp')

可以將其概括為任意信息流,並根據需要提供任意數量的層/輸出。 請記住,對於每個輸出,您需要定義一個相應的損耗(或None )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM