热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TensorFlow人工智能入门教程之十一最强网络DLSTM双向长短期记忆网络(阿里小AI实现)...

2019独角兽企业重金招聘Python工程师标准失眠。。。。上一章讲了最强网络之一RSNN深度残差网络这一章节我们来讲讲还有一个很强的网络模型,就是双向LSTM

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

         失眠 。。。。上一章 讲了 最强网络之一 RSNN 深度残差网络 这一章节 我们来讲讲  还有一个很强的网络模型,就是双向LSTM 也就是前一阵阿里吹牛逼的小AI的 实现的一个重要网络部分,当然实际上 比这还要复杂 层数 以及 多个网络配合,其实就好像 alphaGo 一样,其实多个网络配合 多层 复用 效果是最好的,这就像 我们有大脑第一中枢系统 ,但是我们脊髓 是第二中枢系统一样,脊髓可以控制我们身体的某些肌肉 关节运动,与大脑相互配合调节,通过神经传输 相互传递信息,互相配合调节,大脑为主 脊髓为辅。

     最近在学钢琴,那真难。有些东西境界到的人 懂的人自然会懂。所以我博客分享一下我的理解,这都是自己自学摸索研究的东西,主要一是 希望可以给自己 做个整理,无聊写写东西,其实这些东西 对我来说都是不重要的东西,但是可以让大家 学习了解下人工智能,人工智能 就这么点么,这是基础,前面所有章节全部是基础 ,基础知识,你全部掌握了这些,你还只是一个门外汉,最主要的是要能够熟练的使用 ,无论是用来做什么,随心所欲,因地制宜,能够知道怎么运用,这才是最重要的。所以我把这些对我来说还算很简单的知识吧,这里以及后面,至于方向,我将的东西也许有些是自己的理解,但是绝对不会影响大家的使用,本人去年一年创业 就是使用tensorflow ,然后把它在spark上整合实现了,重新改写了bp反馈层 ff前向层 同时改写了部分代码、实现了0.6时候的tensorflow的与spark 并行 训练,所以对人工智能方面 也许没有很好的数学基础,但是对代码 对理解方面 还是算可以的吧。创业项目基本就是人工智能的运用 以及 使用。

       双向LSTM 阿里的小AI 就是使用它,我估计是使用了双向LSTM 之后接着一个RNN层 并 增强学习。 但是小AI 里面最重要的还是这个双向LSTM,结合RNN 结合 其他的几种网络 还有增强学习 .  

        LSTM 是为了解决 RNN的一些问题,对隐藏层进行改进,让前面上下文信息 能够有更远的印象,也就是记忆,

       LSTM网络本质还是RNN网络,基于LSTM的RNN架构上的变化有最先的BRNN(双向)

 LSTM引入了Cell 与其说LSTM是一种RNN结构,倒不如说LSTM是RNN的一个魔改组件,把上面看到的网络中的小圆圈换成LSTM的block,就是所谓的LSTM了。那它的block长什么样子呢? 

      

  1. Cell,就是我们的小本子,有个叫做state的参数东西来记事儿的

  2. Input Gate,Output Gate,在参数输入输出的时候起点作用,算一算东西

  3. Forget Gate:遗忘门 就像人体的遗忘曲线一样,正是因为遗忘的调节才能知道 那些更重要,因为原始的LSTM在这个位置就是一个值1,是连接到下一时间的那个参数,以前的事情记太牢了,最近的就不住就不好了,所以要选择性遗忘一些东西。通过遗忘进行调节,这样知道那些更重要。那些值得记忆。

    034856_POTc_937000.jpg

            上上一章我们讲了RNN/LSTM 的使用,所以 那些操作 不理解的可以到上上一章去看。

 这里讲一下双向LSTM 

     LSTM网络本质还是RNN网络,基于LSTM的RNN架构上的变化有最先的BRNN(双向)

   在大多数 应用里面 NLP 自动问答 基于时间有关的 上下文有关的,一般都是双向LSTM+LSTM/RNN横向扩展 来实现的 ,效果非常好。好像国内很多吹逼的 都是这样的机构实现的,虽然叫的名字不同但是 其实是一个东西。

双向LSTM 顾名思义采用了 能够双向的LSTM cell单元。是的每次能够访问 下文 也能访问下文

     下面看看BIRNN的结构

    040137_4gvG_937000.png

而 LSTM 我们上面讲了 其实就是RNN 把其中的组件部位换了 加上了cell 也就是记忆单元。 所以双向LSTM

就是把上面双向RNN 里面h 那些园的单元全部换成LSTM单元 就是双向LSTM. 阿里的小AI 就是使用它,我估计是使用了双向LSTM 之后接着一个RNN层 吧。 但是小AI 里面最重要的还是这个双向LSTM,结合RNN 结合 其他的几种网络 还有增强学习 . 

   双向LSTM 在tensorflow中 与 上上篇文章 不同的地方就是

  我们直接使用rnn.rnn 来构建RNN 然后传入的LSTMcell(单元) ,这里双向是

   

rnn.bidirectional_rnn

其他基本与上上章基本相同 ,替换一下 稍微修改下即可,不理解的可以跳回去 看看 上上章 LSTM/RNN的内容

下面贴出 示例代码 

import input_data
mnist = input_data.read_data_sets("/tmp/data/", one_hot=True)import tensorflow as tf
from tensorflow.python.ops.constant_op import constant
from tensorflow.models.rnn import rnn, rnn_cell
import numpy as np# Parameters
learning_rate = 0.001
training_iters = 100000
batch_size = 128
display_step = 10# Network Parameters
n_input = 28 # MNIST data input (img shape: 28*28)
n_steps = 28 # timesteps
n_hidden = 128 # hidden layer num of features
n_classes = 10 # MNIST total classes (0-9 digits)# tf Graph input
x = tf.placeholder("float", [None, n_steps, n_input])
# Tensorflow LSTM cell requires 2x n_hidden length (state & cell)
istate_fw = tf.placeholder("float", [None, 2*n_hidden])
istate_bw = tf.placeholder("float", [None, 2*n_hidden])
y = tf.placeholder("float", [None, n_classes])# Define weights
weights = {# Hidden layer weights => 2*n_hidden because of foward + backward cells'hidden': tf.Variable(tf.random_normal([n_input, 2*n_hidden])),'out': tf.Variable(tf.random_normal([2*n_hidden, n_classes]))
}
biases = {'hidden': tf.Variable(tf.random_normal([2*n_hidden])),'out': tf.Variable(tf.random_normal([n_classes]))
}def BiRNN(_X, _istate_fw, _istate_bw, _weights, _biases, _batch_size, _seq_len):# BiRNN requires to supply sequence_length as [batch_size, int64]# Note: Tensorflow 0.6.0 requires BiRNN sequence_length parameter to be set# For a better implementation with latest version of tensorflow, check below_seq_len = tf.fill([_batch_size], constant(_seq_len, dtype=tf.int64))# input shape: (batch_size, n_steps, n_input)_X = tf.transpose(_X, [1, 0, 2])  # permute n_steps and batch_size# Reshape to prepare input to hidden activation_X = tf.reshape(_X, [-1, n_input]) # (n_steps*batch_size, n_input)# Linear activation_X = tf.matmul(_X, _weights['hidden']) + _biases['hidden']# Define lstm cells with tensorflow# Forward direction celllstm_fw_cell = rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0)# Backward direction celllstm_bw_cell = rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0)# Split data because rnn cell needs a list of inputs for the RNN inner loop_X = tf.split(0, n_steps, _X) # n_steps * (batch_size, n_hidden)# Get lstm cell outputoutputs = rnn.bidirectional_rnn(lstm_fw_cell, lstm_bw_cell, _X,initial_state_fw=_istate_fw,initial_state_bw=_istate_bw,sequence_length=_seq_len)# Linear activation# Get inner loop last outputreturn tf.matmul(outputs[-1], _weights['out']) + _biases['out']pred = BiRNN(x, istate_fw, istate_bw, weights, biases, batch_size, n_steps)# Define loss and optimizer
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y)) # Softmax loss
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost) # Adam Optimizer# Evaluate model
correct_pred = tf.equal(tf.argmax(pred,1), tf.argmax(y,1))
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))# Initializing the variables
init = tf.initialize_all_variables()# Launch the graph
with tf.Session() as sess:sess.run(init)step &#61; 1# Keep training until reach max iterationswhile step * batch_size < training_iters:batch_xs, batch_ys &#61; mnist.train.next_batch(batch_size)# Reshape data to get 28 seq of 28 elementsbatch_xs &#61; batch_xs.reshape((batch_size, n_steps, n_input))# Fit training using batch datasess.run(optimizer, feed_dict&#61;{x: batch_xs, y: batch_ys,istate_fw: np.zeros((batch_size, 2*n_hidden)),istate_bw: np.zeros((batch_size, 2*n_hidden))})if step % display_step &#61;&#61; 0:# Calculate batch accuracyacc &#61; sess.run(accuracy, feed_dict&#61;{x: batch_xs, y: batch_ys,istate_fw: np.zeros((batch_size, 2*n_hidden)),istate_bw: np.zeros((batch_size, 2*n_hidden))})# Calculate batch lossloss &#61; sess.run(cost, feed_dict&#61;{x: batch_xs, y: batch_ys,istate_fw: np.zeros((batch_size, 2*n_hidden)),istate_bw: np.zeros((batch_size, 2*n_hidden))})print "Iter " &#43; str(step*batch_size) &#43; ", Minibatch Loss&#61; " &#43; "{:.6f}".format(loss) &#43; \", Training Accuracy&#61; " &#43; "{:.5f}".format(acc)step &#43;&#61; 1print "Optimization Finished!"# Calculate accuracy for 128 mnist test imagestest_len &#61; 128test_data &#61; mnist.test.images[:test_len].reshape((-1, n_steps, n_input))test_label &#61; mnist.test.labels[:test_len]print "Testing Accuracy:", sess.run(accuracy, feed_dict&#61;{x: test_data, y: test_label,istate_fw: np.zeros((test_len, 2*n_hidden)),istate_bw: np.zeros((test_len, 2*n_hidden))})

下面贴出运行测试截图。

 042119_IOLx_937000.jpg

042202_9A8K_937000.jpg

 


转载于:https://my.oschina.net/yilian/blog/667904


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
author-avatar
jiajiajy323
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有