def __init__(self, batch_size, emb_X, input_size, conv_param, lstm_param, output_size, f1_classes):
super().__init__(batch_size)
self.input_size = input_size
self.conv_param = conv_param
self.inputs = [T.imatrix('input'), T.matrix('mask')]
self.target = T.ivector('target')
l = InputLayer((batch_size, input_size), self.inputs[0])
l_mask = InputLayer((batch_size, input_size + conv_param - 1), self.inputs[1])
l = EmbeddingLayer(l, emb_X.shape[0], emb_X.shape[1], W=emb_X)
l = DimshuffleLayer(l, (0, 2, 1))
l = Conv1DLayer(l, 300, conv_param, pad='full', nonlinearity=rectify)
l = DimshuffleLayer(l, (0, 2, 1))
l = LSTMLayer(
l, lstm_param, mask_input=l_mask, grad_clipping=100, nonlinearity=tanh,
only_return_final=True
)
l = DenseLayer(l, output_size, nonlinearity=log_softmax)
self.pred = T.exp(get_output(l, deterministic=True))
self.loss = T.mean(categorical_crossentropy_exp(self.target, get_output(l)))
params = get_all_params(l, trainable=True)
self.updates = adadelta(self.loss, params)
self.metrics = {'train': [acc], 'val': [acc, f1(f1_classes)]}
self.network = l
self.compile()
评论列表
文章目录