zoukankan      html  css  js  c++  java
  • 循环神经网络(3)

    深层循环神经网络是循环神经网络的另一种变种,为了增强模型的表达能力,可以将每一个时刻上的循环体重复多次。和卷积神经网络类似,每一层的循环体中参数是一致的,而不同层中的参数可以不同。为了更好的支持深层循环神经网络,tensorflow中提供了MultiRNNCell类来实现深层循环神经网络的前向传播过程。以下代码展示如何使用这个类:

    lstm=tf.contrib.rnn.BasicLSTMCell(lstm_size)
    stacked_lstm=tf.contrib.rnn.MultiRNNCell([lstm]*number_of_layers)
    state=stacked_lstm.zero_state(batch_size,tf.float32)
    for i in range(len(num_steps)):
        if i >0:
            tf.get_variable_scope().reuse_variables()
        stacked_lstm_output,state=stacked_lstm(current_input,state)
        final_output=fully_connected(stacked_lstm_output)
        loss+=calc_loss(final_output,expected_output)

    可以看到,相比于之前的LSTM,深层LSTM就是在BasicLSTMCell的基础上封装一层tf.contrib.rnn.MultiRNNCell()就可以实现。

    循环神经网络的dropout:

    循环神经网络中的dropout具有和CNN类似的功能,CNN只在最后的全连接层中使用dropout,循环神经网络一般只在不同层循环体结构之间使用dropout,而不在同一层的循环体结构之间使用。也就是说从时刻t-1传递到时刻t时,循环神经网络不会进行状态的dropout,而在同一时刻t中,不同层循环体之间会使用dropout。在tensorflow中,使用tf.contrib.rnn.DropoutWrapper()类可以很容易实现dropout功能,代码实现如下所示:

    lstm=tf.contrib.rnn.BasicLSTMCell(lstm_size)
    dropout=tf.contrib.rnn.DropoutWrapper(lstm,output_keep_prob=0.7)
    stacked_lstm=tf.contrib.rnn.MultiRNNCell([dropout_lstm]*num_of_layers)
  • 相关阅读:
    可配置智联爬虫
    python 交错列表合并
    猫途鹰简单爬虫正则巩固
    urllib.error.URLError: urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777) 解决办法
    与MongoDB有关的面试题
    go tcp socket
    postgresql摘要
    go+postgresql服务器
    go map slice array channel 传参
    postgresql 数据库学习
  • 原文地址:https://www.cnblogs.com/xiaochouk/p/8781447.html
Copyright © 2011-2022 走看看