通道注意力机制keras_注意力机制及Keras实现

注意力往往与encoder-decoder(seq2seq)框架搭在一起,假设我们编码前与解码后的序列如下:

编码时,我们将source通过非线性变换到中间语义:

则我们解码时,第i个输出为:

可以看到,不管i为多少,都是基于相同的中间语义C进行解码的,也就是说,我们的注意力对所有输出都是相同的。所以,注意力机制的任务就是突出重点,也就是说,我们的中间语义C对不同i应该有不同的侧重点,即上式变为:

常见的有Bahdanau Attention

e(h,s)代表一层全连接层。

及Luong Attention

代码的主要目标是通过一个描述时间的字符串,预测为数字形式的字符串。如“ten before ten o'clock a.m”预测为09:50

在jupyter上运行,代码如下:

1,导入模块,好像并没有全部使用到,如Permute,Multiply,Reshape,LearningRateScheduler等

1 from keras.layers importBidirectional, Concatenate, Permute, Dot, Input, LSTM, Multiply, Reshape2 from keras.layers importRepeatVector, Dense, Activation, Lambda3 from keras.optimizers importAdam4 #from keras.utils import to_categorical

5 from keras.models importload_model, Model6 #from keras.callbacks import LearningRateScheduler

7 importkeras.backend as K8

9 importmatplotlib.pyplot as plt10 %matplotlib inline11

12 importrandom13 #import math

14

15 importjson16 import numpy as np

2,加载数据集,以及翻译前和翻译后的词典

1 with open('data/Time Dataset.json','r') as f:2 dataset =json.loads(f.read())3 with open('data/Time Vocabs.json','r') as f:4 human_vocab, machine_vocab =json.loads(f.read())5

6 human_vocab_size =len(human_vocab)7 machine_vocab_size = len(machine_vocab)

这里human_vocab词典是将每个字符映射到索引,machine_vocab是将翻译后的字符映射到索引,因为翻译后的时间只包含0-9以及冒号:

3,定义数据处理方法

1 defpreprocess_data(dataset, human_vocab, machine_vocab, Tx, Ty):2 """

3 A method for tokenizing data.4

5 Inputs:6 dataset - A list of sentence data pairs.7 human_vocab - A dictionary of tokens (char) to id's.8 machine_vocab - A dictionary of tokens (char) to id's.9 Tx - X data size10 Ty - Y data size11

12 Outputs:13 X - Sparse tokens for X data14 Y - Sparse tokens fo

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值