[英]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.