theano_learner_v3.py 文件源码

python
阅读 20 收藏 0 点赞 0 评论 0

项目:gelearn 作者: lookatmoon 项目源码 文件源码
def get_train_function(self):
        # specify the computational graph
        num_param_vecs = T.scalar('num_param_vecs')
        # weight = theano.shared(np.random.randn(len(self.feature_map), self.num_param_vecs), name='weight')
        weight = theano.shared(np.zeros((len(self.feature_map), self.num_param_vecs)), name='weight')
        feat_mat = sparse.csr_matrix(name='feat_mat')
        pred = T.nnet.sigmoid( sparse.dot(feat_mat, weight) ) # one-vs-rest

        o_pred = ifelse(T.gt(self.num_param_vecs, 1), pred / pred.sum(axis=1).reshape((pred.shape[0], 1)), T.concatenate( [pred, 1-pred], axis=1 ) )  

        f_target = T.matrix('f_target')
        f_mask_mat = sparse.csr_matrix(name='f_mask_mat')
        f_sum_pred = sparse.dot( f_mask_mat, o_pred )
        f_pred = f_sum_pred / f_sum_pred.sum(axis=1).reshape((f_sum_pred.shape[0], 1))

        i_target = T.matrix('i_target')
        i_mask_mat = sparse.csr_matrix(name='l_mask_mat')
        i_pred = sparse.dot( i_mask_mat, pred )

        # objective = self.param.feature_lambda * T.nnet.categorical_crossentropy(f_pred, f_target).sum() + T.nnet.binary_crossentropy(i_pred, i_target).sum() + self.param.l2_lambda * (weight ** 2).sum() / 2
        objective = 0.0 * T.nnet.categorical_crossentropy(f_pred, f_target).sum() + T.nnet.binary_crossentropy(i_pred, i_target).sum() + self.param.l2_lambda * (weight ** 2).sum() / 2

        grad_weight = T.grad(objective, weight)

        # print 'Compiling function ...'
        # compile the function
        train = theano.function(inputs = [feat_mat, f_mask_mat, f_target, i_mask_mat, i_target], outputs = [objective, weight], updates=[(weight, weight - 0.1*grad_weight)] )

        return train
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号