TF28——字母预测onehot_4pre1.md


TF28——字母预测onehot_4pre1.md

用RNN实现输入连续四个字母,预测下一个字母(One hot编码)

image-20220321162246064

按照六步法,首先import相关模块

image-20220321162910752

我们用到的字母有5个是 a b c d e,为了送入神经网络,把字母表示为数字0 1 2 3 4,把数字 0 1 2 3 4编码为独热码

image-20220321141835074

生成训练用的输入特征x_train和标签y_train,输入连续的abcd,对应的标签是e,输入连续的bcde,对应的标签是a,输入连续的cdea,对应的标签是b,输入连续的deab,对应的标签是c,输入连续的eabc,对应的标签是d

image-20220321163004407

将他们打乱顺序

image-20220321163250772

把输入特征变成RNN层期待的形状,使x_train符合SimpleRNN要求:[送入样本数,循环核时间展开步数,每个时间步输入特征个数]

  • 第一个维度喂入输入特征的个数,使整个数据集样本数,有5个,可以用len(x_train)得到

  • 第二个维度循环核时间展开步数,因为四个字母通过四个连续的时刻送入网络,所以时间展开步数是4

  • 第三个维度每个时间步输入特征个数,每个时间步输入的是字母对应的独热码,是5个数,所以这里是5

再把y_train变为numpy格式

image-20220321163423099

搭建育有三个记忆体的循环层,三个是我随意选的数字,你也可以自行调整记忆体个数,记忆体个数越多,记忆力越好,但是占用资源会更多,可以改变记忆体个数,看看模型收敛效果

这个Dense层实现了输出层yt的计算,由于要映射到独热码编码,找到输出概率最大的字母,所以这里是5

image-20220321143007009

随后是cmopile fit summary和六步法一样,执行反向传播训练参数矩阵

image-20220321143438839

提取参数和acc/loss可视化,同样用了六步法八股的套路

image-20220321143541527

应用:字母预测

用了一个for循环,先输入要执行几次预测任务,随后等待输入四个字母,把这个字母,转换为独热码,调整为RNN层希望的形状,

  • 只送入1组输入特征所以送入样本数是1,
  • 输入连续的4个字母就给出预测结果,所以时间展开步数是4
  • 每个时间步输入的是字母对应的独热码,是5个数,所以这里是5

通过predict得到预测结果,选出预测结果最大的一个,print输出预测结果

image-20220321164425324