如何在 theano/lasagne 中以树的形式遍历模型层?
我需要按树级别遍历模型的层,以便获得祖先(输入)和前驱(输出)层以及同一级别中的相邻层。
这是一个模型作为示例:
import lasagne
def toy_model():
l_input = lasagne.layers.InputLayer(shape=(None, inp_len, n_inputs))
l_dim_a = lasagne.layers.DimshuffleLayer(l_input, (0, 2, 1))
l_conv_a = lasagne.layers.Conv1DLayer(
incoming=l_dim_a, num_filters=16, pad='same',
filter_size=3, stride=1, nonlinearity=lasagne.nonlinearities.rectify)
l_conv_a_b = lasagne.layers.batch_norm(l_conv_a)
l_conv_b = lasagne.layers.Conv1DLayer(
incoming=l_dim_a, num_filters=16, pad='same',
filter_size=3, stride=1, nonlinearity=lasagne.nonlinearities.rectify)
l_conv_b_b = lasagne.layers.batch_norm(l_conv_b)
l_conv_c = lasagne.layers.Conv1DLayer(
incoming=l_dim_a, num_filters=16, pad='same',
filter_size=3, stride=1, nonlinearity=lasagne.nonlinearities.rectify)
l_conv_c_b = lasagne.layers.batch_norm(l_conv_c)
l_c_a = lasagne.layers.ConcatLayer([l_conv_a_b, l_conv_b_b, l_conv_c_b], axis=1)
l_dim_b = lasagne.layers.DimshuffleLayer(l_conv_c, (0, 2, 1))
l_c_b = lasagne.layers.ConcatLayer([l_input, l_dim_b], axis=2)
l_reshape = lasagne.layers.ReshapeLayer(l_c_b, (batch_size* inp_len, n_inputs + (3*3) ))
l_FC = lasagne.layers.DenseLayer(l_reshape, num_units=200, nonlinearity=lasagne.nonlinearities.rectify)
l_prop = lasagne.layers.DenseLayer(l_FC, num_units=n_classes, nonlinearity=lasagne.nonlinearities.softmax)
l_output = lasagne.layers.ReshapeLayer(l_prop, (batch_size, inp_len, n_classes))
return l_input, l_output
提供一个示例(如果有)将会有所帮助。
I need to traverse the model's layers by tree levels, such that getting the ancestor(input) and predecessor(output) layers and the adjacent layers in the same level.
here's a model as an example:
import lasagne
def toy_model():
l_input = lasagne.layers.InputLayer(shape=(None, inp_len, n_inputs))
l_dim_a = lasagne.layers.DimshuffleLayer(l_input, (0, 2, 1))
l_conv_a = lasagne.layers.Conv1DLayer(
incoming=l_dim_a, num_filters=16, pad='same',
filter_size=3, stride=1, nonlinearity=lasagne.nonlinearities.rectify)
l_conv_a_b = lasagne.layers.batch_norm(l_conv_a)
l_conv_b = lasagne.layers.Conv1DLayer(
incoming=l_dim_a, num_filters=16, pad='same',
filter_size=3, stride=1, nonlinearity=lasagne.nonlinearities.rectify)
l_conv_b_b = lasagne.layers.batch_norm(l_conv_b)
l_conv_c = lasagne.layers.Conv1DLayer(
incoming=l_dim_a, num_filters=16, pad='same',
filter_size=3, stride=1, nonlinearity=lasagne.nonlinearities.rectify)
l_conv_c_b = lasagne.layers.batch_norm(l_conv_c)
l_c_a = lasagne.layers.ConcatLayer([l_conv_a_b, l_conv_b_b, l_conv_c_b], axis=1)
l_dim_b = lasagne.layers.DimshuffleLayer(l_conv_c, (0, 2, 1))
l_c_b = lasagne.layers.ConcatLayer([l_input, l_dim_b], axis=2)
l_reshape = lasagne.layers.ReshapeLayer(l_c_b, (batch_size* inp_len, n_inputs + (3*3) ))
l_FC = lasagne.layers.DenseLayer(l_reshape, num_units=200, nonlinearity=lasagne.nonlinearities.rectify)
l_prop = lasagne.layers.DenseLayer(l_FC, num_units=n_classes, nonlinearity=lasagne.nonlinearities.softmax)
l_output = lasagne.layers.ReshapeLayer(l_prop, (batch_size, inp_len, n_classes))
return l_input, l_output
providing an example, if any, will be helpful.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论