nerv.include('reader.lua')
nerv.include('select_linear.lua')
gconf = {
chunk_size = 15,
dropout_rate = 0,
lrate = 1.5,
wcost = 1e-5,
max_iter = 35,
clip = 5,
momentum = 0.9,
batch_size = 200,
test = true,
}
local hidden_size = 300
local vocab_size = 10000
local layer_num = 1
local dropout_rate = 0.5
local trainer = nerv.Trainer
function trainer:make_layer_repo(param_repo)
local layers = {
['nerv.LSTMLayer'] = {},
['nerv.DropoutLayer'] = {},
['nerv.SelectLinearLayer'] = {
['select'] = {dim_in = {1}, dim_out = {hidden_size}, vocab = vocab_size, pr = param_repo},
},
['nerv.AffineLayer'] = {
output = {dim_in = {hidden_size}, dim_out = {vocab_size}, pr = param_repo},
},
['nerv.SoftmaxCELayer'] = {
softmax = {dim_in = {vocab_size, 1}, dim_out = {1}, compressed = true},
},
}
for i = 1, layer_num do
layers['nerv.LSTMLayer']['lstm' .. i] = {dim_in = {hidden_size}, dim_out = {hidden_size}, pr = param_repo}
layers['nerv.DropoutLayer']['dropout' .. i] = {dim_in = {hidden_size}, dim_out = {hidden_size}}
end
return nerv.LayerRepo(layers, param_repo, gconf)
end
function trainer:get_network(layer_repo)
local connections = {
{'[1]', 'select[1]', 0},
{'select[1]', 'lstm1[1]', 0},
{'dropout' .. layer_num .. '[1]', 'output[1]', 0},
{'output[1]', 'softmax[1]', 0},
{'[2]', 'softmax[2]', 0},
{'softmax[1]', '