Keras examples-addition_rnn

本文介绍了如何使用Keras实现序列学习任务,即两个整数的加法。通过将数字和加号转化为字符,再进行one-hot编码,构建了一个神经网络模型。文章详细讲解了数据构造、模型搭建、训练过程以及网络结构的可视化,重点讨论了RepeatVector和TimeDistributed层的应用。
摘要由CSDN通过智能技术生成

Keras examples-addition_rnn

1、任务描述

(1)任务概述:主要是利用序列学习来实现两个整数(字符串)的加法
(2)任务分析:两个整数相加,需要通过神经网络来训练,于是不能够直接将整型作为神经网络的输入;想想办法,如果将整数和加号等都转化为字符,于是就可以用一个字符串来表示这个加法问题了;字符串表示的加法问题,可以看成是文本,于是紧接着考虑用什么语言模型来表示这个问题,由于加法问题中涉及到的字符种类不多,只有12类,‘0-9’、‘+’、‘ ’,因此可以直接考虑使用one-hot模型。

2、具体实现

(1)引入相应的库
from __future__ import print_function
from keras.models import Sequential
from keras import layers
import numpy as np
from six.moves import range
from keras.utils import plot_model
(2)定义相应的方法、设置常量

这里主要定义了两个类,一个是编码解码类,另一个是预测结果的颜色处理类。
①编码解码类:包含三个方法:构造方法,编码方法,解码方法。
构造方法:在创建编码解码对象时,会接收一个字符串,这个字符串包含了所有涉及到的字符,构造函数利用该字符串创建了两个字典,一个是{字符:索引}型字典,一个是{索引:字符}型字典。前一个字典主要在编码阶段使用,用于将一个字符转化为one-hot类型,后裔字典主要在解码阶段使用,将one-hot矩阵表示的问题转化为对应的文本。
{字符:索引}型:{’ ‘: 0, ‘+’: 1, ‘0’: 2, ‘1’: 3, ‘2’: 4, ‘3’: 5, ‘4’: 6, ‘5’: 7, ‘6’: 8, ‘7’: 9, ‘8’: 10, ‘9’: 11}
{索引,字符}型:{0: ’ ‘, 1: ‘+’, 2: ‘0’, 3: ‘1’, 4: ‘2’, 5: ‘3’, 6: ‘4’, 7: ‘5’, 8: ‘6’, 9: ‘7’, 10: ‘8’, 11: ‘9’}
编码方法:将传来的一个字符串编码城one-hot矩阵,具体实现是首先创建一个零矩阵,然后针对字符串的第i个字符,得到这个字符在字符字典中的索引为j,于是将零矩阵的第i行和第j列的元素置为1。直到将这个字符串的所有字符都编码。
解码方法:解码方法可以看成是编码方法的逆,将one-hot矩阵转为字符串
其实,这个类也可以利用keras内置的文本预处理方法来实现。
②颜色处理类:主要声明一些常量。

class CharacterTable(object):
    # 对于给定的一组字符
    ## 将他们编码为one-hot的整型来表示
    ## 将一个one-hot表示的解码为其字符
    ## 将概率向量解码为其字符输出
    def __init__(self,chars):
        # 初始化字符表
        self.chars=sorted(set(chars))
        # 创建字符表中字符和其索引的对应关系(字符:索引)
        self.char_indices=dict((c,i) for i,c in enumerate(self.chars))
        print(self.char_indices)
        # 创建字符表中字符和其索引的对应关系(索引:字符)
        self.indices_char=dict((i,c) for i,c in enumerate(self.chars))
        print(self.indices_char)

    # 将给定的字符串C编码成one-hot模型,参数num_rows指定这个矩阵的行数(等于问题的最大长度),列数等于字符表中总的字符数
    def encode(self,c,num_rows):     
        # 创建一
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值