Ich habe folgende LSTM Modellimplementierung in Fackel, die ich von hier aus nahm: https://github.com/wojzaremba/lstm/blob/master/main.luaLSTM oben auf CNN
Ich habe eine Frage zu folgendem Stück Code:
local function create_network()
local x = nn.Identity()()
local y = nn.Identity()()
local prev_s = nn.Identity()()
local i = {[0] = LookupTable(params.vocab_size,
params.rnn_size)(x)}
local next_s = {}
local split = {prev_s:split(2 * params.layers)}
for layer_idx = 1, params.layers do
local prev_c = split[2 * layer_idx - 1]
local prev_h = split[2 * layer_idx]
local dropped = nn.Dropout(params.dropout)(i[layer_idx - 1])
local next_c, next_h = lstm(dropped, prev_c, prev_h)
table.insert(next_s, next_c)
table.insert(next_s, next_h)
i[layer_idx] = next_h
end
local h2y = nn.Linear(params.rnn_size, params.vocab_size)
local dropped = nn.Dropout(params.dropout)(i[params.layers])
local pred = nn.LogSoftMax()(h2y(dropped))
local err = nn.ClassNLLCriterion()({pred, y})
local module = nn.gModule({x, y, prev_s},
{err, nn.Identity()(next_s)})
module:getParameters():uniform(-params.init_weight, params.init_weight)
return transfer_data(module)
end
In der Einbettung Teil der lstm Eingabe, der Code verwendet eine LookupTable
Schicht bei der Handhabung der Ptb-Datenbank, jetzt frage ich mich, wie man LookupTable
verwenden, um andere Einbettung zu anderen Daten zu definieren. Insbesondere ist die Eingabe RGB-Bilder und die Einbettung wird eines der CNN-Modelle sein, beispielsweise AlexNet ohne vollständig verbundene Schichten. (https://gist.github.com/gcr/0bab9929dfee95164a4d)
Es sieht für mich zu unscharf. Gibt es ein besseres Design für diesen Zweck? Wie kann ich LSTM auf dem CNN-Modell erstellen?