要不先从RNN开始吧,循环神经网络

First
RNN 是两种神经网络的缩写,一种是递归神经网络(Recursive Neural Network),一种是循环神经网络(Recurrent Neural Network),我们常用的一般是循环神经网络。
递归神经网络是指一个随着时间的推移,重复发生的结构。例如,如果你有一个序列ABCDE,该序列被送到一个神经元,而这个神经元的输出链接到它的输入上。即相当于在一开始的时候:输入为A,输出为B,第二个时间点B又被作为输入传入,随着时间的推移展开这个网络。
而循环神经网络的作用类似于,当我们阅读一篇文章时,会从上下文中产生联想,帮助我们更好的理解这篇文章。循环神经网络,可以根据已经出现的事件来推理后面发生的事情,它们可以在网络中循环,并能够维持信息。
这里写图片描述
嗯嗯,大概就是这样,随手截的图。
信息通过回路从目前状态传递到下一个状态。同一个单元不停地处理不同的输入值,而这些值是自己产生的。
RNN已经成功地应用在各种问题上,并取得令人难以置信的成功。例如,语音识别、语言建模、翻译、字幕、图像·····而关键是他们都使用了一种循环神经网络的变种LSTMs(长短期记忆网络)。
RNN的诉求之一是,它也许能够将以前的信息连接到当前任务。例如,我们有时需要使用前一个视频帧理解当前帧的内容。但是,for example:考虑一个语言模型试图预测基于当前的下一个词语 : 今儿中午吃红烧排骨,于是我和女朋友去超市买()()。
如果我试图从红烧排骨这个关键词来判断这里应该填写的是排骨····为什么一定是和女朋友去买排骨呢···笑···,如果红烧排骨和我们要填的词语之间的时间差距较小的时候,那么RNN就很有可能利用过去的信息,得到我们想要的结果。但是更多的时候,今儿中午吃红烧排骨,于是我和女朋友开开心心心,手拉手·····省略·····一万字,然后去超市买()()。这样的话,根据上下文信息就很难确定这里应该填什么,因为它们之间的位置距离实在是太远了·····就好像如果从红烧排骨这个位置得到的信息的准确率是0.9,但是每经过一次循环后···准确率就会*0.9····如果两个位置实在太远,准确率就会变为0···大概是这个意思吧。网上有莫烦的一个教程,大家可以搜看看,我觉得很好。
LSTM网络
LSTM是一种特殊的循环神经网络,具有能够学习的长期依赖能力,比如在文本处理中能够利用很宽范围的上下文信息来判断下一个词的概率。
·····我想了下···我应该还是没有看懂这部分······等我懂了再写吧·····
结合Tensorflow学习:RNN的代码如下······

import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data

#数据
mnist = input_data.read_data_sets('MNIST_data',one_hot = True)

#参数
lr = 0.001
trainning_iters = 100000
batch_size = 128
display_step = 10

n_inputs = 28 #图片是28*28维
n_steps = 28 #time steps
n_hidden_units = 128 #隐藏层节点数
n_classes = 10 #这是一个十分类问题

#图片输入
x = tf.placeholder(tf.float32,[None,n_steps,n_inputs])
y = tf.placeholder(tf.float32,[None,n_classes])

#定义权重

weights = { 'in':tf.Variable(tf.random_normal([n_inputs,n_hidden_units])),
            'out':tf.Variable(tf.random_normal([n_hidden_units,n_classes]))}

#偏置
biases = {'in':tf.Variable(tf.constant(0.1,shape=[n_hidden_units,])),
          'out':tf.Variable(tf.constant(0.1,shape=[n_classes,]))}

def RNN(X,weights,biases):
    X = tf.reshape(X,[-1,n_inputs])
    X_in = tf.matmul(X,weights['in'])+biases['in']
    X_in = tf.reshape(X_in,[-1,n_steps,n_hidden_units])
    #神经元

    lstm_cell = tf.nn.rnn_cell.BasicLSTMCell(n_hidden_units,forget_bias=1.0,state_is_tuple = True)

    _init_state = lstm_cell.zero_state(batch_size,dtype = tf.float32)

    outputs,states = tf.nn.dynamic_rnn(lstm_cell,X_in,initial_state = _init_state,time_major = False)

    #隐藏层

    #outputs = tf.unstack(tf.transpose(outputs,[1,0,2]))
    #results = tf.matmul(outputs[-1],weights['out'])+biases['out']
    results = tf.matmul(states[1],weights['out'])+biases['out']

    return results








pred = RNN(x,weights,biases)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=pred))
train_op = tf.train.AdamOptimizer(lr).minimize(cost)


correct_pred = tf.equal(tf.argmax(pred,1),tf.argmax(y,1))
accuracy = tf.reduce_mean(tf.cast(correct_pred,tf.float32))

init = tf.initialize_all_variables()
with tf.Session() as sess:
    sess.run(init)
    step = 0
    while step *batch_size <trainning_iters:
        batch_xs,batch_ys = mnist.train.next_batch(batch_size)
        batch_xs = batch_xs.reshape([batch_size,n_steps,n_inputs])
        sess.run([train_op],feed_dict={
            x:batch_xs,
            y:batch_ys,})
        if step % 20 == 0:
            print(sess.run(accuracy,feed_dict = {
                x

:batch_xs,
                y:batch_ys,}))

喏,第一次写博客,我也只是想用这个方法来督促自己的学习。
很好的一个朋友毕业的时候,大抵是有点伤感,她说,愿你出走半生 归来仍是少年,而我好像没心没肺一样,总感觉毕业之后还会再见,我怎么可能还是少年,我是孩子王。许久没见的朋友每次见我都会说,欸,我怎么感觉你还是跟高中一样是个二愣子呢?··笑····我以前还挺爱写些东西给他们看,后来吧,人总归是要长大的。而我其实也只希望身边的朋友都快乐,不要忧伤。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值