这周作业分为了两部分:
- 机器翻译
- 触发关键字
Part1:机器翻译
你将建立一个将人类可读日期(“2009年6月25日”)转换为机器可读日期(“2009-06-25”)的神经机器翻译(NMT)模型。 你将使用注意力机制来执行此操作,这是模型序列中最尖端的一个序列。
你将创建的模型可用于从一种语言翻译为另一种语言,如从英语翻译为印地安语。 但是,语言翻译需要大量的数据集,并且通常需要几天的GPU训练。 在不使用海量数据的情况下,为了让你有机会尝试使用这些模型,我们使用更简单的“日期转换”任务。
网络以各种可能格式(例如“1958年8月29日”,“03/30/1968”,“1987年6月24日”)写成的日期作为输入,并将它们转换成标准化的机器可读的日期(例如“1958 -08-29“,”1968-03-30“,”1987-06-24“),让网络学习以通用机器可读格式YYYY-MM-DD输出日期。
- X: 经过处理的训练集中人类可读日期,其中每个字符都替换为其在human_vocab中映射到的索引。 每个日期用特殊字符进一步填充为Tx长度。 X.shape =(m,Tx)
- Y: 经过处理的训练集中机器可读日期,其中每个字符都替换为其在machine_vocab中映射到的索引。 你应该有Y.shape =(m,Ty)。
- Xoh:X的one-hot向量,Xoh.shape = (m,Tx,len(human_vocab))
- Yoh:Y的one-hot向量,Yoh.shape = (m,Tx,len(machine_vocab))
采用注意力机制的机器翻译
定义一些layers
1 | # Defined shared layers as global variables |
然后根据a 和 s 得到context
1 | # GRADED FUNCTION: one_step_attention |
实现model()
1 | n_a = 32 |
1 | # GRADED FUNCTION: model |
Part2:Trigger Word Detection
做触发关键字的检测。
X: 这里把每一段音频分为了10s,而10s内细分为了5511个小的片段,也就是Tx = 5511
Y: Ty = 1375,每个y都是一个布尔值,用来记录有没有收到触发关键字。
生成一个训练示例
这里把样本分为了三种,背景音乐,正向的音频,反向的音频,合成训练示例:
- 随机选择一个10秒的背景音频剪辑
- 随机将0-4个正向音频片段插入此10秒剪辑中
- 随机将0-2个反向音频片段插入此10秒剪辑中
合成后类似这样:
定义一个随机插入片段起始和终点位置的函数:
1 | def get_random_time_segment(segment_ms): |
然后需要判断在别的片段插入的时候,有没有被占用:
1 | # GRADED FUNCTION: is_overlapping |
生成input音频片段:
1 | # GRADED FUNCTION: insert_audio_clip |
生成y标签:
1 | # GRADED FUNCTION: insert_ones |
1 | # GRADED FUNCTION: create_training_example |
实现model()
1 | # GRADED FUNCTION: model |
这里载入预训练好的模型,不需要自己训练那么久了,
1 | model = load_model('./models/tr_model.h5') |