python神经网络Keras实现GRU及其参数量
神经网络Keras实现GRU及其参数量更新时间是二零二二年五月七日十时三十四分二十七秒, 作者是。这篇文章主要是为广大的朋友们介绍了如何利用Keras框架来实现GRU神经网络, 并且还涉及到了其参数量相关的内容, 对于有需要的朋友们来说, 这个可以作为借鉴和参考的素材, 希望能够帮助到大家取得一定的进展, 祝大家在未来的日子里能够多多进步, 并且能够早日实现升职加薪这一目标。什么是GRU这个叫作GRU的东西, 它实际上是的一种修改后的样子。它继承并保留了长短期记忆网络的门控结构框架, 不过在这个框架里面, 原本属于长短期记忆网络的那三个门, 被改动成了两个, 这两个具体的名字叫更新门跟重置门。1、GRU单元的输入与输出下面的这个图是说的, 每一个GRU单元, 它们自己本身是一个什么样的样子。到了n这个时间点上, 每一个GRU单元所接收到的输入信息包含两个部分。输出有一个在当前的这一时刻, 模型中部分所产生的输出值被标记为。2、GRU的门结构这个GRU里面是带着两个门结构的, 具体来说呢, 它们这两个部分是:更新门zt和重置门rt更新门是用在控制的那个地方, 它用来管以前那个时候的状态信息被放到现在这个状态里去, 到底占多少比例, 更新门的这个数值要是变大了的话, 那么就说明以前那个时刻的状态信息带进来了很少的一点点儿, 反而是这一会儿这个时刻出来的新的状态信息被带进去的部分变得更多了。重置门的作用是用来控制到底在多大程度上选择去忽略来自于前一时刻的那些状态信息, 如果重置门的值比较小, 那就说明它确实忽略掉了更多的情况。3、关于这个更新门里的参数数量计算的问题, 我们来把这件事展开讲讲。更新门在图中的标号为zt需要结合ht-1和Xt来决定上一时刻的输出ht-1有多少得到保留更新门的值越大说明前一时刻的状态信息保留越少这一时刻的状态信息保留越多。通过将公式进行结合分析, 我们可以得出以下结论。zt这个东西它是被ht-1和Xt这两个家伙给决定了的。如果更新门zt的数值比较高的话, 那么上一个时间步骤所产出的那个结果ht-1就被保留得比较少一些, 与此同时, 当前这个时间点里面的状态信息就会被保留得多一些。b、重置门在图中, 重置门使用的是标号 rt。它的作用是配合前一时刻的状态信息 ht-1 还有当前的输入 Xt 一块儿用。主要是为了控制该不该忽略掉之前的状态信息。当这个重置门的数值变得比较小的时候, 就意味着之前时刻的信息会被忽略得更多一些。通过将公式进行结合分析, 我们可以得出以下结论。rt是由ht-1和Xt这两个东西来决定的。当重置门rt的取值属于较低的那一类时候, 上一时刻的输出ht-1所被保留的部分就比较少, 这就说明在操作过程中忽略掉的成分相对更多一些。c、全部参数量因此, 对于所有门而言, 其总体需要统计的数量就是:在Keras中实现GRUGRU一般来说, 通常是必须要去输入那两个相关的参数进去的。一个是所谓的unit, 另外一个是空的, 没有具体内容。LSTM(CELL_SIZE, input_shape (TIME_STEPS,INPUT_SIZE))单位是用来指定神经元的数量的。用来指定输入的形状, 要分别去把这两个位置给说清楚。实现代码import numpy as npfrom keras.models import Sequentialfrom keras.layers import Input,Activation,Densefrom keras.models import Modelfrom keras.datasets import mnistfrom keras.layers.recurrent import GRUfrom keras.utils import np_utilsfrom keras.optimizers import AdamTIME_STEPS 28INPUT_SIZE 28BATCH_SIZE 50index_start 0OUTPUT_SIZE 10CELL_SIZE 75LR 1e-3(X_train,Y_train),(X_test,Y_test) mnist.load_data()X_train X_train.reshape(-1,28,28)/255X_test X_test.reshape(-1,28,28)/255Y_train np_utils.to_categorical(Y_train,num_classes 10)Y_test np_utils.to_categorical(Y_test,num_classes 10)inputs Input(shape[TIME_STEPS,INPUT_SIZE])x GRU(CELL_SIZE, input_shape (TIME_STEPS,INPUT_SIZE))(inputs)x Dense(OUTPUT_SIZE)(x)x Activation(softmax)(x)model Model(inputs,x)adam Adam(LR)model.summary()model.compile(loss categorical_crossentropy,optimizer adam,metrics [accuracy])for i in range(50000):X_batch X_train[index_start:index_start BATCH_SIZE,:,:]Y_batch Y_train[index_start:index_start BATCH_SIZE,:]index_start BATCH_SIZEcost model.train_on_batch(X_batch,Y_batch)if index_start X_train.shape[0]:index_start 0if i0 0:cost,accuracy model.evaluate(X_test,Y_test,batch_size50)print(accuracy:,accuracy)实现效果10000/10000 [] - 2s 231us/stepaccuracy: 0.1674999998696148410000/10000 [] - 2s 206us/stepaccuracy: 0.613400001525878910000/10000 [] - 2s 214us/stepaccuracy: 0.705800001919269610000/10000 [] - 2s 209us/stepaccuracy: 0.797899999320507