【TensorFlow】自主实现包含全节点Cell的LSTM层 Cell-Holding LSTM Layer

0x00 前言

常用的LSTM,或是双向LSTM,输出的结果通常是以下两个:
1) outputs,包括所有节点的hidden
2) 末节点的state,包括末节点的hidden和cell
大部分任务有这些就足够了,state是随着节点间信息的传递依次变化并容纳更多信息,
所以通常末状态的cell就囊括了所有信息,不需要中间每个节点的cell信息,
但如果我们的研究过程中需要用到这些cell该如何是好呢?

近期的任务中,需要每个节点的前后节点cell信息来做某种判断,
所以属于一个较为特殊的任务,自主实现了一下这个同样也会反馈cell的LSTM,
哦顺带一提Cell-Holding,是强行为了简称成CHD取的名字(笑)

Read More

【TensorFlow】自主实现部分连接层 Partial Connect Layer

0x00 前言

通常而言,在NLP领域的机器学习中时常会有这样的需求:$ argmax P(w_i \mid \theta) $
较为常见的做法是有多少个单词就做一个多少维的全连接层加softmax,但是,
如果词汇表 $|V|$ 很大的情况下,会有大量的计算(例如目前的工作中,词汇表的数量为80k),
在我们已知只需要计算其中某些词语的时候,完全可以屏蔽掉其中多余的计算,
(即使增加一个mask把非计算部分都设为 $0$,乘以 $0$ 的乘法也不要做比较好),
所以这里想到新构造一个 partial connect layer 来解决这个问题。
(因为懒得更新TF,各位如果新配的TF环境完全可以试着去官方文档里搜搜 sparse_ 开头的各种方法)

Read More

【TensorFlow】屏蔽Padding处理变长序列的双向LSTM

0x00 前言

通常我们处理双向LSTM的时候,序列长短不一参差不齐,就不可避免的需要进行padding,
实际上句子长度可能如下所示,为[2, 4, 5],就需要被padding成这样才能作为矩阵传入计算:

1
2
3
array([[1, 2, 0, 0, 0],
[2, 1, 4, 3, 0],
[3, 2, 1, 5, 4]], dtype=int32)

对于padding的数据做双向LSTM的时候,反向的部分会将0也算入,
虽说对于大多任务中,把padding也算作一个词,做一个padding的embedding,
也是可以获得不错的效果的,但是存在过长的句子时,
大多较短句子后面过多的padding会把末状态过于稀释,
诸如此类,还有各种各样的情况都希望可以双向LSTM可以每个方向都只计算有效长度

Read More

【拓扑排序】包含拓扑深度的拓扑排序LeetCode329

0x01 题面

LeetCode 329. Longest Increasing Path in a Matrix 传送门

Given an integer matrix, find the length of the longest increasing path.

From each cell, you can either move to four directions: left, right, up or down. You may NOT move diagonally or move outside of the boundary (i.e. wrap-around is not allowed).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Example 1
nums = [
[9,9,4],
[6,6,8],
[2,1,1]
]
# Return 4
# The longest increasing path is [1, 2, 6, 9].
# Example 2:
nums = [
[3,4,5],
[3,2,6],
[2,2,1]
]
# Return 4
# The longest increasing path is [3, 4, 5, 6]. Moving diagonally is not allowed.
Read More

【Pathlib】面向对象的Python3的文件系统路径

Pathlib:将文件系统路径作为对象使用
《pathlib —— Object-oriented filesystem paths》

0x00 前言

目前,Python 科学栈中的所有主要项目都同时支持 Python 3.x 和 Python 2.7,不过,这种情况很快即将结束。去年 11 月,Numpy 团队的一份声明引发了数据科学社区的关注:这一科学计算库即将放弃对于 Python 2.7 的支持,全面转向 Python 3。Numpy 并不是唯一宣称即将放弃 Python 旧版本支持的工具,pandas 与 Jupyter notebook 等很多产品也在即将放弃支持的名单之中。【新闻链接】

根据近期新闻,隐隐觉得必须尽早熟识掌握进阶到Python3的特性与区别,今天看了看文件路径方面,发现这个还挺好用的自带库,那么来看看它的特性吧。

Read More