循环神经网络RNN笔记记录
Sequence 序列
语句语义分析
将语句:I like wujing's film
将“我喜欢吴京的电影”语句转化为向量序列:一个句子、四个单词、每个单词的特征用一个一行四列的矩阵表示
则有:[1,4,4] => [b,word_num,word_vec]
具体到不同的对象分析时候,数据纬度会有所改变,例如股票的运行算法分析:假定采样了某公司股价波形的b段波形,每个波形段提取N个k线,每个k线的收盘价格为price
则该数据集表示为:[b,N,price]
而实际处理时候纬度改变 重新定义为:[N,b,price]
即将提取的n个k线作为横轴时间序列,b段作为具体某个时间点时刻,b段上每段波形上price在第j段(j包含于N)上的特征分析。
语音波形采样也可以这样表示。
图片采样:[b,28,28] 表示b张图片 每个图片28行28列 这是最初的理解,在 Sequence序列角度重新定义则 28行为时间节点,28列为特征节点,不过图片处理还是大多使用卷积神经网络,循环神经网络更侧重处理具有时间节点序列的数据分析。
循环神经网络对于文字(比如电影好坏评论)的处理,则不再是逻辑上的转换,更侧重于语义层面的转换。联想之前的one-hot编码类型不同位置代表不同的特征,这里可以代表不同的字词。
但是这种处理数据的方式,显然对于巨量的词汇无法灵活处理,数据太大,比如10k数量的段落,显然9.9k个位置为0 仅仅一个位置为1,繁琐且占用内存,计算量增大。
这个时候需要新的数据处理方式
[word,word_vec]
model.most_similar('king',topn=10)
找出最相近的king单词。
word embedding
单词用数字做索引代表 每个索引映射到一个向量,且相似语义的单词转化为的向量相近 形成的夹角小
使用layers.embedding方法(类似于Dense)
e.g
x = tf.range(5)
x = tf.random.shuffle(x)
以上生成了一个随机打散的一个tensor数据 一行5列 定义其每个数字代表一个城市。
然后定义一个网络层,内部有激活函数,将x输入到net层中计算出x中的地名与之相似的地名。
net = tf.keras.layers.Embedding(10, 4)
表示 总单词数量
Sequence embedding 序列嵌入
网络世界,不加微信QQ手机,留言沟通
发表评论