AI人工智能(调包侠)速成之路八(RNN循环神经网络 Recurrent Neural Networks)

        未来的程序员必定需要掌握调用神经网路模型实现人工智能功能的能力,(调包侠)一定是未来程序员的必经之路。好在新工具平台的不断出现,功能调用越来越向API方向发展,补上相关知识继续上路吧。

RNN循环神经网络与时空序列数据

RNN全称循环神经网络(Recurrent Neural Networks),是用来处理时空序列数据的。语言、文章、股票走势这些都是常见的序列信号,我们交谈的时候要听懂一句话的内容,首先要依次听懂和记住前面每个单词,然后把后续听到的单词内容综合到前面的信息里面去,最后才能理解整个句子的内容。例如:“经过调查伊拉克政府没有大规模杀伤性武器,非也......”。一个句子中前后单词并不是独立的先后顺序也不能打乱。RNN循环神经网路就是专门处理这类时空序列数据的。

时空序列数据的表示与转换 Sequence Embedding

时空数据常见的是表格的形式表示例如:股票历史数据中的最低价、最高价、开盘价、收盘价、交易量、交易额、跌涨幅等。

语言信息数字采样

声音的波形数字采样也可以直接计算和处理, 比较困难的是非数值类型的信号,例如自然语言和文字的数字化表示。好在这些基础的问题现在的工具都已经内部集成了解决方案。只需要设置下参数就可以使用了。

from    tensorflow.keras import layers
self.embedding = layers.Embedding(total_words, embedding_len, input_length=max_review_len)

实战LSTM:情感分类问题

LSTM全称长短期记忆人工神经网络(Long-Short Term Memory),是对RNN循环神经网络的经典实现和解决方案。训练集我们使用的是 IMDB 数据集。这个数据集包含 25000 条电影评论数据,其中 12500 条正向数据,12500 条负向数据。要实现的目标是让神经网络能读懂评论信息,自动分辨出好评和差评。

import  os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'

import  tensorflow as tf
import  numpy as np
from    tensorflow import keras
from    tensorflow.keras import layers

tf.random.set_seed(22)
np.random.seed(22) 
assert tf.__version__.startswith('2.')

batchsz = 128

total_words = 10000    # 最大词汇量
max_review_len = 80    # 最长句子单词数(短的句子后面补齐长度,长的句子超过80个单词截断丢弃)
embedding_len = 100    # 转换后的变量维度
(x_train, y_train), (x_test, y_test) = keras.datasets.imdb.load_data(num_words=total_words)
# x_train:[b, 80]
# x_test: [b, 80]
x_train = keras.preprocessing.sequence.pad_sequences(x_train, maxlen=max_review_len)
x_test = keras.preprocessing.sequence.pad_sequences(x_test, maxlen=max_review_len)

db_train = tf.data.Dataset.from_tensor_slices((x_train, y_train))
db_train = db_train.shuffle(1000).batch(batchsz, drop_remainder=True)
db_test = tf.data.Dataset.from_tensor_slices((x_test, y_test))
db_test = db_test.batch(batchsz, drop_remainder=True)

上面的代码加载数据集分成训练和测试数据。下面先定义循环神经网络模型。


class MyRNN(keras.Model):

    def __init__(self, units):
        super(MyRNN, self).__init__()


        # transform text to embedding representation
        # [b, 80] => [b, 80, 100]
        self.embedding = layers.Embedding(total_words, embedding_len,
                                          input_length=max_review_len)

        # [b, 80, 100] , h_dim: 64
        self.rnn = keras.Sequential([
            layers.LSTM(units, dropout=0.5, return_sequences=True, unroll=True),
            layers.LSTM(units, dropout=0.5, unroll=True)
        ])


        # fc, [b, 80, 100] => [b, 64] => [b, 1]
        self.outlayer = layers.Dense(1)

    def call(self, inputs, training=None):
        # [b, 80]
        x = inputs
        # embedding: [b, 80] => [b, 80, 100]
        x = self.embedding(x)
        # x: [b, 80, 100] => [b, 64]
        x = self.rnn(x,training=training)

        # out: [b, 64] => [b, 1]
        x = self.outlayer(x)
        # p(y is pos|x)
        prob = tf.sigmoid(x)

        return prob

 定义的神经网络用了容器keras.Sequential,里面是两层LSTM,第一层需要return_sequences=True参数,dropout是一个模型优化方法。并且调用layers.Embedding功能将单词编码成了100维的变量。

下面就可以将转换后的变量用来训练神经网络模型了。 

 

if __name__ == '__main__':
    units = 64
    epochs = 4

    model = MyRNN(units)
    model.compile(optimizer = keras.optimizers.Adam(0.001),
                  loss = tf.losses.BinaryCrossentropy(),
                  metrics=['accuracy'])
    model.fit(db_train, epochs=epochs, validation_data=db_test)

    model.evaluate(db_test)

 

循环神经网络的发展:时空序列预测

       循环神经能从历史信息里面提取出规律并对后续的数据给出预测,于是网上出现了大量使用LSTM模型预测股票走势,预测彩票结果的文章。如果真能实现这种效果那学习人工智能真是花多大的代价都值得了,巴菲特、西蒙斯什么老古董都入土吧!如果价格的变化走势能用一个公式表达出来,那么用循环神经网络肯定是能拟合预测出未来走势,问题转换成了“价格的变化走势能否用一个公式表达出来?”很明显答案是否定的。
        近年来流行的行为金融学给出了一些定性的非理性认知偏差(过度自信、盲信权威、从众效应、盲信喜好)。用神经网络去定量研究特定情形下,特定时间段的非理性行为或许是个不错的方向。成功难以复制,失败或可避免。

用ST-LSTM预测学习的循环神经网络 PredRNN
论文下载: http://ise.thss.tsinghua.edu.cn/~mlong/doc/predrnn-nips17.pdf

Casual LSTM和GHU解决时空预测学习中的深度困境 PredRNN++
论文下载地址:http://proceedings.mlr.press/v80/wang18b/wang18b.pdf

当前理论发展迅速,工具明显跟不上进度了。(调包侠)只能等待最新的集成工具出来。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: RNN是一种循环神经网络,它在自然语言处理和序列数据处理中非常常见。虽然我们可以从头开始实现RNN,但建议使用现有的库和包来简化代码,并且提高效率。以下是一种使用Python中的tensorflow库实现RNN的示例: 首先,我们需要导入所需的库和模块: import tensorflow as tf 然后,定义RNN的参数: num_units = 128 input_size = 10 batch_size = 32 time_steps = 20 num_classes = 2 接下来,我们创建输入和输出的占位符: inputs = tf.placeholder(tf.float32, [None, time_steps, input_size]) outputs = tf.placeholder(tf.float32, [None, num_classes]) 然后,我们使用tf.keras.layers中的SimpleRNN层来创建RNNrnn_layer = tf.keras.layers.SimpleRNN(units=num_units) rnn_output = rnn_layer(inputs) 接下来,我们使用全连接层,并应用softmax激活函数来得到最终的输出: fc_layer = tf.keras.layers.Dense(num_classes, activation='softmax') outputs_pred = fc_layer(rnn_output) 接下来,我们定义损失函数和优化器: loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=outputs_pred, labels=outputs)) optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss) 然后,我们可以设置会话,并进行训练: sess = tf.Session() sess.run(tf.global_variables_initializer()) for epoch in range(100): batch_inputs, batch_outputs = get_batch_data() feed_dict = {inputs: batch_inputs, outputs: batch_outputs} sess.run(optimizer, feed_dict=feed_dict) 最后,我们可以使用训练好的模型来进行预测: test_inputs, _ = get_batch_data() feed_dict = {inputs: test_inputs} predictions = sess.run(outputs_pred, feed_dict=feed_dict) 这是一个简单的RNN实现的例子。使用现有的库和包可以帮助我们快速地构建和训练RNN模型,并简化了我们的代码。当然,我们可以根据具体需要调整参数和网络结构来优化模型。 ### 回答2: RNN循环神经网络)是一种能够处理序列数据的神经网络模型。在实际应用中,我们可以使用现有的深度学习库中提供的循环神经网络调包来实现RNN模型。 首先,我们需要选择一个适用的深度学习框架,如TensorFlow、PyTorch或Keras。这些框架都提供了对RNN模型的支持,并且具有相应的调包可以导入和使用。 接下来,我们需要导入所选框架中的RNN模型相关的调包。通常,这些调包包含了模型结构定义、数据预处理和模型训练的功能。 在导入调包之后,我们需要定义RNN模型的结构。这一步通常涉及选择RNN层的类型(如SimpleRNN、LSTM或GRU)、隐藏层的大小、输入序列的长度等。根据框架的不同,具体的代码实现方式会有所差异。 接下来,我们可以使用导入的调包进行数据预处理。这可能包括文本向量化、标签编码或者对序列数据进行填充等操作。循环神经网络的输入通常是一个序列,我们需要确保输入的形状与模型的要求相匹配。 最后,我们可以使用导入的调包训练RNN模型。这一步包括设置模型的优化器、损失函数和评估指标,然后使用训练数据进行模型训练。具体的训练过程可以通过调用框架提供的训练函数来完成。 总之,通过调用现有深度学习框架中提供的RNN调包,我们可以方便地实现循环神经网络模型。这些调包提供了RNN模型的结构定义、数据预处理和模型训练等功能,使得我们可以更加专注于模型的应用和优化。 ### 回答3: RNN(Recurrent Neural Network,循环神经网络)是一种常用于处理序列数据的深度学习模型。为了简化RNN的实现过程,我们可以使用一些流行的深度学习库中提供的RNN调包,例如TensorFlow或PyTorch。 以TensorFlow为例,实现一个基本的RNN模型可以分为以下几个步骤: 1.导入必要的库以及数据集。首先,需要导入TensorFlow库,然后准备好要训练和测试的数据集。 2.数据预处理。在输入数据进入RNN之前,通常需要进行一些预处理操作,例如标准化、序列填充等。 3.定义RNN模型。使用TensorFlow提供的调包,我们可以很方便地定义一个RNN模型。可以选择不同类型的循环神经网络单元(例如LSTM或GRU),定义隐藏层的大小以及输入输出的维度等。 4.设置优化器和损失函数。选择合适的优化器(如Adam或SGD)和适当的损失函数(如交叉熵)来最小化模型的误差。 5.训练模型。使用数据集进行模型训练,通过反向传播和优化器来更新模型的权重和偏差。 6.模型评估。使用测试集来评估模型的性能,比如计算准确率、损失值等。 7.模型应用。训练好的RNN模型可以用于实际应用中,如生成文本、机器翻译、语音识别等。 总结来说,调包可以极大地简化RNN模型的实现过程。我们只需要了解RNN的原理和基本步骤,然后使用调包提供的API进行模型的搭建、训练和评估等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值