RNN(Recurrent Neural Network)是一类用于处理序列数据的神经网络。首先给大家介绍什么是序列数据。时间序列数据是指在不同时间点上收集到的数据,这类数据反映了某一事物、现象等随时间的变化状态或程度。这是时间序列数据的定义,当然这里也可以不是时间,比如文字序列,但总归序列数据有一个特点——后面的数据跟前面的数据有关系。我们之所以给大家补充RNN,是因为RNN在自然语言处理这一块应用的特别广泛,尤其是其中的LSTM更是在自然语言处理中的文本分类用的较为多,因此,大家最好将其熟练掌握。

RNN的结构及变体

  如果我们学过神经网络的话,大概都清楚常见的神经网络包括输入层、隐层、输出层, 通过激活函数控制输出,层与层之间通过权值连接。激活函数是事先确定好的,那么神经网络模型通过训练“学“到的东西就蕴含在“权值“中。基础的神经网络只在层与层之间建立了权连接,RNN最大的不同之处就是在层之间的神经元之间也建立的权连接。具体如图所示:
RNN
这是一个标准的RNN结构图,图中每个箭头代表做一次变换,也就是说箭头连接带有权值。左侧是折叠起来的样子,右侧是展开的样子,左侧中h旁边的箭头代表此结构中的“循环“体现在隐层。在展开结构中我们可以观察到,在标准的RNN结构中,隐层的神经元之间也是带有权值的。也就是说,随着序列的不断推进,前面的隐层将会影响后面的隐层。图中O代表输出,y代表样本给出的确定值,L代表损失函数,我们可以看到,“损失“也是随着序列的推荐而不断积累的。除上述特点之外,标准RNN的还有以下特点:
1、权值共享,图中的W全是相同的,U和V也一样。
2、每一个输入值都只与它本身的那条路线建立权连接,不会和别的神经元连接。
以上是RNN的标准结构,然而在实际中这一种结构并不能解决所有问题,例如我们输入为一串文字,输出为分类类别,那么输出就不需要一个序列,只需要单个输出。具体如图所示:
变体1
同样的,我们有时候还需要单输入但是输出为序列的情况。那么就可以使用如下结构:
变体2
还有一种结构是输入虽是序列,但不随着序列变化,就可以使用如下结构:
变体3
原始的N vs N RNN要求序列等长,然而我们遇到的大部分问题序列都是不等长的,如机器翻译中,源语言和目标语言的句子往往并没有相同的长度。下面我们来介绍RNN最重要的一个变种:N vs M。这种结构又叫Encoder-Decoder模型,也可以称之为Seq2Seq模型。
变体4
从名字就能看出,这个结构的原理是先编码后解码。左侧的RNN用来编码得到c,拿到c后再用右侧的RNN进行解码。得到c有多种方式,最简单的方法就是把Encoder的最后一个隐状态赋值给c,还可以对最后的隐状态做一个变换得到c,也可以对所有的隐状态做变换。

除了以上这些结构以外RNN还有很多种结构,用于应对不同的需求和解决不同的问题。还想继续了解可以看一下下面这个博客,里面又介绍了几种不同的结构。但相同的是循环神经网络除了拥有神经网络都有的一些共性元素之外,它总要在一个地方体现出“循环“,而根据“循环“体现方式的不同和输入输出的变化就形成了多种RNN结构。

标准RNN的前向输出流程

  上面介绍了RNN有很多变种,但其数学推导过程其实都是大同小异。这里就介绍一下标准结构的RNN的前向传播过程。
标准输出
再来给大家介绍一下各个符号的含义:x是输入,h是隐层单元,o为输出,L为损失函数,y为训练集的标签。这些元素右上角带的t代表t时刻的状态,其中需要注意的是,因策单元h在t时刻的表现不仅由此刻的输入决定,还受t时刻之前时刻的影响。V、W、U是权值,同一类型的权连接权值相同。有了上面的解释,前向传播算法其实非常简单,对于t时刻:

其中delta()为激活函数,一般来说会选择tanh函数,b为偏置。即t时刻的输出就更为简单:

最终模型的预测输出为:

其中delta为激活函数,通常RNN用于分类,故这里一般用softmax函数。

RNN的训练方法——BPTT

  BPTT(back-propagation through time)算法是常用的训练RNN的方法,其实本质还是BP算法,只不过RNN处理时间序列数据,所以要基于时间反向传播,故叫随时间反向传播。BPTT的中心思想和BP算法相同,沿着需要优化的参数的负梯度方向不断寻找更优的点直至收敛。综上所述,BPTT算法本质还是BP算法,BP算法本质还是梯度下降法,那么求各个参数的梯度便成了此算法的核心。

B再次拿出这个结构图观察,需要寻优的参数有三个,分别是U、V、W。与BP算法不同的是,其中W和U两个参数的寻优过程需要追溯之前的历史数据,参数V相对简单只需关注目前,那么我们就来先求解参数V的偏导数。

其实这个式子看起来简单但是求解起来很容易出错,因为其中嵌套着激活函数函数,是复合函数的求道过程。RNN的损失也是会随着时间累加的,所以不能只求t时刻的偏导。

W和U的偏导的求解由于需要涉及到历史数据,其偏导求起来相对复杂,我们先假设只有三个时刻,那么在第三个时刻 L对W的偏导数为:

相应的,L在第三个时刻对U的偏导数为:

可以观察到,在某个时刻的对W或是U的偏导数,需要追溯这个时刻之前所有时刻的信息,这还仅仅是一个时刻的偏导数,上面说过损失也是会累加的,那么整个损失函数对W和U的偏导数将会非常繁琐。虽然如此但好在规律还是有迹可循,我们根据上面两个式子可以写出L在t时刻对W和U偏导数的通式:

整体的偏导公式就是将其按时刻再一一加起来。
前面说过激活函数是嵌套在里面的,如果我们把激活函数放进去,拿出中间累乘的那部分:

或是

我们会发现累乘会导致激活函数导数的累乘,进而会导致“梯度消失“和“梯度爆炸“现象的发生。究其原因是两个激活函数:
以下是sigmoid函数的函数图和导数图:

这是tanh函数的函数图和导数图。

它们二者是何其的相似,都把输出压缩在了一个范围之内。他们的导数图像也非常相近,我们可以从中观察到,sigmoid函数的导数范围是(0,0.25],tanh函数的导数范围是(0,1],他们的导数最大都不大于1。这就会导致一个问题,在上面式子累乘的过程中,如果取sigmoid函数作为激活函数的话,那么必然是一堆小数在做乘法,结果就是越乘越小。随着时间序列的不断深入,小数的累乘就会导致梯度越来越小直到接近于0,这就是“梯度消失“现象。其实RNN的时间序列与深层神经网络很像,在较为深层的神经网络中使用sigmoid函数做激活函数也会导致反向传播时梯度消失,梯度消失就意味消失那一层的参数再也不更新,那么那一层隐层就变成了单纯的映射层,毫无意义了,所以在深层神经网络中,有时候多加神经元数量可能会比多家深度好。讲到这里,你可能会有些许疑惑:RNN明明与深层神经网络不同,RNN的参数都是共享的,而且某时刻的梯度是此时刻和之前时刻的累加,即使传不到最深处那浅层也是有梯度的。这当然是对的,但如果我们根据有限层的梯度来更新更多层的共享的参数一定会出现问题的,因为将有限的信息来作为寻优根据必定不会找到所有信息的最优解。
之前说过我们多用tanh函数作为激活函数,那tanh函数的导数最大也才1啊,而且又不可能所有值都取到1,那相当于还是一堆小数在累乘,还是会出现“梯度消失“,那为什么还要用它做激活函数呢?原因是tanh函数相对于sigmoid函数来说梯度较大,收敛速度更快且引起梯度消失更慢。还有一个原因是sigmoid函数还有一个缺点,Sigmoid函数输出不是零中心对称。sigmoid的输出均大于0,这就使得输出不是0均值,称为偏移现象,这将导致后一层的神经元将上一层输出的非0均值的信号作为输入。关于原点对称的输入和中心对称的输出,网络会收敛地更好。
RNN的特点本来就是能“追根溯源“利用历史数据,现在告诉我可利用的历史数据竟然是有限的,这就令人非常难受,解决“梯度消失“是非常必要的。这里说两种改善“梯度消失”的方法:首先是选取更好的激活函数、其次是改变传播结构。
针对选取更好的激活函数,我们一般选取ReLU函数作为激活函数,ReLU函数的图像为:

ReLU函数的左侧导数为0,右侧导数恒为1,这就避免了小数的连乘,但反向传播中仍有权值的累乘,所以说ReLU函数不能说完全解决了“梯度消失”现象,只能说改善。有研究表明,在RNN中使用ReLU函数配合将权值初始化到单位矩阵附近,可以达到接近LSTM网络的效果。但恒为1的导数容易导致“梯度爆炸“,但设定合适的阈值可以解决这个问题。还有一点就是如果左侧横为0的导数有可能导致把神经元学死,不过设置合适的步长(学习率)也可以有效避免这个问题的发生。
对于改变传播结构,LSTM结构就是传统RNN的改善。因此,sigmoid函数的缺点:
1、导数值范围为(0,0.25],反向传播时会导致“梯度消失“。tanh函数导数值范围更大,相对好一点。
2、sigmoid函数不是0中心对称,tanh函数是,可以使网络收敛的更好。

LSTM

  接下来给大家详细介绍LSTM的相关内容。长短期记忆网络是RNN的一种变体,RNN由于梯度消失的原因只能有短期记忆,LSTM网络通过精妙的门控制将加法运算带入网络中,一定程度上解决了梯度消失的问题。只能说一定程度上,过长的序列还是会出现“梯度消失”,因此LSTM叫长一点的“短时记忆”。

长期依赖(Long-Term Dependencies)问题

  RNN 的关键点之一就是他们可以用来连接先前的信息到当前的任务上,有时候,我们仅仅需要知道先前的信息来执行当前的任务。例如,我们有一个语言模型用来基于先前的词来预测下一个词。如果我们试着预测 “the clouds are in the sky” 最后的词,我们并不需要任何其他的上下文 —— 因此下一个词很显然就应该是 sky。在这样的场景中,相关的信息和预测的词位置之间的间隔是非常小的,RNN 可以学会使用先前的信息。

但是同样会有一些更加复杂的场景。假设我们试着去预测“I grew up in France… I speak fluent French”最后的词。当前的信息建议下一个词可能是一种语言的名字,但是如果我们需要弄清楚是什么语言,我们是需要先前提到的离当前位置很远的 France 的上下文的。这说明相关信息和当前预测位置之间的间隔就肯定变得相当的大。但是,在这个间隔不断增大时,RNN 会丧失学习到连接如此远的信息的能力。

在理论上,RNN 绝对可以处理这样的 长期依赖 问题。人们可以仔细挑选参数来解决这类问题中的最初级形式,但在实践中,RNN 肯定不能够成功学习到这些知识。Bengio, et al. (1994)等人对该问题进行了深入的研究,他们发现一些使训练 RNN 变得非常困难的相当根本的原因。不过,LSTM 并没有这个问题。

LSTM 网络

  Long Short Term 网络—— 一般就叫做 LSTM ——是一种 RNN 特殊的类型,可以学习长期依赖信息。LSTM 由Hochreiter & Schmidhuber (1997)提出,并在近期被Alex Graves进行了改良和推广。在很多问题,LSTM 都取得相当巨大的成功,并得到了广泛的使用。LSTM 通过刻意的设计来避免长期依赖问题。记住长期的信息在实践中是 LSTM 的默认行为,而非需要付出很大代价才能获得的能力!所有 RNN 都具有一种重复神经网络模块的链式的形式。在标准的 RNN 中,这个重复的模块只有一个非常简单的结构,例如一个 tanh 层。

LSTM 同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于 单一神经网络层,整体上除了h在随时间流动,细胞状态c也在随时间流动,细胞状态c就代表着长期记忆。

LSTM 的核心思想

  LSTM 的关键就是细胞状态,水平线在图上方贯穿运行。细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。

LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid 神经网络层和一个 pointwise 乘法操作。

Sigmoid 层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。0 代表“不许任何量通过”,1 就指“允许任意量通过”!LSTM 拥有三个门,来保护和控制细胞状态。

逐步理解 LSTM

  在我们 LSTM 中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为遗忘门完成。该门会读取h(t-1)和xt,输出一个在 0 到 1 之间的数值给每个在细胞状态C(t-1)中的数字。1 表示“完全保留”,0 表示“完全舍弃”。让我们回到语言模型的例子中来基于已经看到的预测下一个词。在这个问题中,细胞状态可能包含当前主语的性别,因此正确的代词可以被选择出来。当我们看到新的主语,我们希望忘记旧的主语。

这里可以抛出两个问题:这个门怎么做到“遗忘“的呢?怎么理解?既然是遗忘旧的内容,为什么这个门还要接收新的xt?对于第一个问题,“遗忘“可以理解为“之前的内容记住多少“,其精髓在于只能输出(0,1)小数的sigmoid函数和粉色圆圈的乘法,LSTM网络经过学习决定让网络记住以前百分之多少的内容。对于第二个问题就更好理解,决定记住什么遗忘什么,其中新的输入肯定要产生影响。下一步是确定什么样的新信息被存放在细胞状态中。这里包含两个部分。第一,sigmoid 层称 “输入门层” 决定什么值我们将要更新。然后,一个 tanh 层创建一个新的候选值向量,非C 会被加入到状态中。下一步,我们会讲这两个信息来产生对状态的更新。在我们语言模型的例子中,我们希望增加新的主语的性别到细胞状态中,来替代旧的需要忘记的主语。

现在是更新旧细胞状态的时间了,Ct-1更新为Ct。我们把旧状态与ftitC~tf_t相乘。丢弃掉我们确定需要丢弃的信息。接着加上i_t*\tilde{C}_t。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。有了上面的理解基础输入门,输入门理解起来就简单多了。sigmoid函数选择更新内容,tanh函数创建更新候选。

最终,我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。首先,我们运行一个 sigmoid 层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过 tanh 进行处理(得到一个在 -1 到 1 之间的值)并将它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。

这三个门虽然功能上不同,但在执行任务的操作上是相同的。他们都是使用sigmoid函数作为选择工具,tanh函数作为变换工具,这两个函数结合起来实现三个门的功能。这就是RNN算法以及LSTM的全部内容,如果还看不懂,可以看看这篇内容,讲的挺详细的。接下来给大家介绍RNN的实际操作。

基于Pytorch的RNN的核心代码

  在实际代码操作之前,我们实验的环境依然是前面文章用到的环境。不过我们需要的是得安装好pytorch三方库,安装只需要:

python3 -m pip install --upgrade torch torchvision -i https://pypi.tuna.tsinghua.edu.cn/simple

  详细地可以参考网上的文章,相关库的安装文档特别的多,这里有一篇挺有效的,推荐给大家。安装好之后即可进行试验。

import torch
import torch.nn
class RnnCore(nn.Module):def __init__(self,inputSize,hiddenSize,outputSize,layers=1):super(RnnCore,self).__init__()self.hidden_size = hiddenSizeself.num_layers = layersself.embedding = nn.Embedding(inputSize,hiddenSize)self.rnn = nn.RNN(hiddenSize,hiddenSize,layers,batch_first=True)self.fc = nn.Linear(hiddenSize,outputSize)self.softmax = nn.LogSoftmax(dim=1)def forward(self,inputs,hidden):x = self.embedding(inputs)output,hidden = self.rnn(x,hidden)output = output[:,-1,:]output = self.fc(output)return output,hiddendef initHidden(self):return Variable(torch.zeros(self.num_layers,1,self,hidden_size))

基于Pytorch实现的序列生成实战

1、任务描述
观察以下序列:
01
0011
000111
00001111
…………
不难发下其规律:
1、它们都只包含0和1
2、它们的长度不相等
3、0和1的数量是相同的,出现是连续的
4、通用的表示为 ‘0’* n + ‘1’ *n,n表示0和1出现的数量
这个序列在计算机中,我们称其为上下文无关文法,简单的说,就是可以被一组替代规则所生成,而与所处的上下文本身是无关的。
2、任务分析
1、如果出现的序列是0000,那么下一位是0还是1显然不能确定
2、如果出现的序列是00001,那么下一位是1
3、如果序列是00001111,此时0和1的数量相同,显然这个序列下一步应该结束
下面我们使用RNN来完成这个序列生成的任务。主要可以分为训练学习和序列生成两个步骤,在训练阶段,RNN尝试用前面的字符来预测下一个,在生成阶段,RNN会根据给点的种子来生成一个完整的序列。

#encoding=utf-8
import torch
import torch.nn  as nn
import torch.optim
from torch.autograd import Variable
from collections import Counter
import matplotlib 
import matplotlib.pyplot as plt
from matplotlib import rc
import numpy as np
class SimpleRnn(nn.Module):def __init__(self,input_size,hidden_size,output_size,num_layers=1):super(SimpleRnn,self).__init__()self.hidden_size = hidden_sizeself.num_layers  = num_layersself.embedding = nn.Embedding(input_size,hidden_size)self.rnn = nn.RNN(hidden_size,hidden_size,num_layers,batch_first= True)self.fc = nn.Linear(hidden_size,output_size)self.softmax = nn.LogSoftmax(dim=1)def forward(self,inputs,hidden):x = self.embedding(inputs)output,hidden = self.rnn(x,hidden)output = output[:,-1,:]output = self.fc(output)output = self.softmax(output)  return output,hiddendef initHidden(self):return Variable(torch.zeros(self.num_layers,1,self.hidden_size))
train_set = []
validset = []
sample = 2000
sz = 10
probablity = 1.0 *np.array([10,6,4,3,1,1,1,1,1,1])
probablity = probablity[:sz]
probablity = probablity / sum(probablity)
for m in range(2000):n = np.random.choice(range(1,sz+1),p=probablity)inputs = [0]*n + [1]*ninputs.insert(0,3)inputs.append(2)train_set.append(inputs)
for m in range(sample // 10):n =np.random.choice(range(1,sz+1),p=probablity)inputs = [0] * n + [1] *ninputs.insert(0,3)inputs.append(2)validset.append(inputs)
for m in range(2):n = sz + minputs = [0] * n + [1] *ninputs.insert(0,3)inputs.append(2)validset.append(inputs)
rnn = SimpleRnn(input_size=4, hidden_size=2, output_size=3)
criterion = torch.nn.NLLLoss() 
optimizer = torch.optim.Adam(rnn.parameters(),lr=0.001)
num_epoch = 50
results = []
for epoch in range(num_epoch):train_loss = 0np.random.shuffle(train_set)for i,seq in enumerate(train_set):loss = 0hidden = rnn.initHidden() for t in range(len(seq)-1):x = Variable(torch.LongTensor([seq[t]]).unsqueeze(0))y = Variable(torch.LongTensor([seq[t+1]]))output,hidden = rnn(x,hidden)loss += criterion(output,y)loss = 1.0 * loss / len(seq)optimizer.zero_grad()loss.backward()optimizer.step()train_loss += lossif i>0 and i % 500 ==0:print('第{}轮,第{}个,训练平均loss:{:.2f}'.format(epoch,i,train_loss.data.numpy()/i))valid_loss = 0errors = 0show_out_p =''show_out_t = ''for i,seq in enumerate(validset):loss = 0outstring = ''targets = ''diff = 0hidden = rnn.initHidden()for t in range(len(seq)-1):x = Variable(torch.LongTensor([seq[t]]).unsqueeze(0))y = Variable(torch.LongTensor([seq[t+1]]))output,hidden = rnn(x,hidden)data = output.data.numpy()print("the output is ",data)mm = torch.max(output,1)[1][0]outstring += str(mm.data.numpy())targets += str(y.data.numpy()[0])loss += criterion(output,y)diff += 1 - mm.eq(y).data.numpy()[0]loss = 1.0 * loss / len(seq)valid_loss += losserrors += diffif np.random.rand() < 0.1:show_out_p += outstring show_out_t += targetsprint(output[0][2].data.numpy())print('第{}轮,训练loss: {:.2f},校验loss:{:.2f},错误率:{:.2f}'.format(epoch,train_loss.data.numpy()/len(train_set),                                                                               valid_loss.data.numpy()/len(validset)                                                                                   ,1.0*errors/len(validset)))print("the show output is: ",show_out_p)print("the show taget is: ",show_out_t)results.append([train_loss.data.numpy()/len(train_set),valid_loss/len(train_set),1.0*errors/len(validset)])

RNN算法的应用实例

  在接下来给大家介绍三个RNN的应用实例,从开始的对字符的处理到文字的处理,以及最后的每日新闻预测金融市场变化应用实例,不过,在此之前给大家数据集(验证码为:xebr)。大家可以下载数据集,然后放在相应的位置,具体位置如图所示:

具体的文档目录如下所示:

文档内容如下图所示:

1、用RNN做文本生成(char)
我们这里用温斯顿丘吉尔的人物传记作为我们的学习语料。具体实现如下:
1、导入各种库

import numpy
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
from keras.layers import LSTM
from keras.callbacks import ModelCheckpoint
from keras.utils import np_utils

2、接下来,我们把文本读入

raw_text = open(r'F:\南昌大学\自然语言处理\学习自然语言处理资料\课件资料\6DLinNLP\input\Winston_Churchil.txt', encoding='utf-8').read()
raw_text = raw_text.lower()

既然我们是以每个字母为层级,字母总共才26个,所以我们可以很方便的用One-Hot来编码出所有的字母(当然,可能还有些标点符号和其他noise)

chars = sorted(list(set(raw_text)))
char_to_int = dict((c,i) for i,c in enumerate(chars))
int_to_char = dict((i,c) for i,c in enumerate(chars))

我们看到,全部的chars:

一共有:

len(chars)

同时,我们的原文本一共有:

len(raw_text)


3、构造训练测试集
我们需要把我们的raw text变成可以用来训练的x,y:x 是前置字母们 y 是后一个字母。

seq_length = 100
x = []
y = []
for i in range(0, len(raw_text) - seq_length):given = raw_text[i:i+seq_length]predict = raw_text[i + seq_length]x.append([char_to_int[char] for char in given])y.append(char_to_int[predict])
print(x[:3])
print(y[:3])


接下来我们做两件事:
1、我们已经有了一个input的数字表达(index),我们要把它变成LSTM需要的数组格式: [样本数,时间步伐,特征]
2、第二,对于output,我们在Word2Vec里学过,用one-hot做output的预测可以给我们更好的效果,相对于直接预测一个准确的y数值的话。

n_patterns = len(x)
n_vocab = len(chars)
x = numpy.reshape(x, (n_patterns, seq_length, 1))
x = x/float(n_vocab)
y = np_utils.to_categorical(y)
print(x[11])
print(y[11])


4、模型建造

model = Sequential()
model.add(LSTM(256, input_shape=(x.shape[1], x.shape[2])))
model.add(Dropout(0.2))
model.add(Dense(y.shape[1], activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam')
model.fit(x, y, nb_epoch=50, batch_size=4096)


最后,我们来写个程序,看看我们训练出来的LSTM的效果:

def predict_next(input_array):x = numpy.reshape(input_array, (1, seq_length, 1))x = x / float(n_vocab)y = model.predict(x)return ydef string_to_index(raw_input):res = []for c in raw_input[(len(raw_input)-seq_length):]:res.append(char_to_int[c])return resdef y_to_char(y):largest_index = y.argmax()c = int_to_char[largest_index]return cdef generate_article(init, rounds=200):in_string = init.lower()for i in range(rounds):n = y_to_char(predict_next(string_to_index(in_string)))in_string += nreturn in_stringinit = 'His object in coming to New York was to engage officers for that service. He came at an opportune moment'
article = generate_article(init)
print(article)


2、用RNN做文本生成(Word)
文本内容如图所示

接下来用python将其实现:
1、先导入各种库

import os
import numpy as np
import nltk
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
from keras.layers import LSTM
from keras.callbacks import ModelCheckpoint
from keras.utils import np_utils
from gensim.models.word2vec import Word2Vec

2、接下来,我们把文本读入

raw_text = ''
for file in os.listdir(r'C:\\Users\\Administrator\\NLP\\复习八天学习自然语言处理内容\\第六天\input\\'):if file.endswith(".txt"):raw_text += open(r'C:\\Users\\Administrator\\NLP\\复习八天学习自然语言处理内容\\第六天\input\\'+file, errors='ignore').read() + '\n\n'
# raw_text = open('../input/Winston_Churchil.txt').read()
raw_text = raw_text.lower()
sentensor = nltk.data.load('tokenizers/punkt/english.pickle')        
sents = sentensor.tokenize(raw_text)
corpus = []
for sen in sents:corpus.append(nltk.word_tokenize(sen))print(len(corpus))
print(corpus[:3])

w2v_model = Word2Vec(corpus, size=128, window=5, min_count=5, workers=4)
w2v_model['office']


接下来,其实我们还是以之前的方式来处理我们的training data,把源数据变成一个长长的x,好让LSTM学会predict下一个单词:

raw_input = [item for sublist in corpus for item in sublist]
len(raw_input)
raw_input[12]
text_stream = []
vocab = w2v_model.wv.vocab
for word in raw_input:if word in vocab:text_stream.append(word)
len(text_stream)


3、构造训练测试集
我们需要把我们的raw text变成可以用来训练的x,y:x 是前置字母们 y 是后一个字母。

seq_length = 10
x = []
y = []
for i in range(0, len(text_stream) - seq_length):given = text_stream[i:i + seq_length]predict = text_stream[i + seq_length]x.append(np.array([w2v_model[word] for word in given]))y.append(w2v_model[predict])
print(x[10])
print(y[10])
print(len(x))
print(len(y))
print(len(x[12]))
print(len(x[12][0]))
print(len(y[12]))
print(x[10])
print(y[10])
print(len(x))
print(len(y))
print(len(x[12]))
print(len(x[12][0]))
print(len(y[12]))

x = np.reshape(x, (-1, seq_length, 128))
y = np.reshape(y, (-1,128))

接下来我们做两件事:
1、我们已经有了一个input的数字表达(w2v),我们要把它变成LSTM需要的数组格式: [样本数,时间步伐,特征]
2、第二,对于output,我们直接用128维的输出
4、模型建造

model = Sequential()
model.add(LSTM(256, dropout_W=0.2, dropout_U=0.2, input_shape=(seq_length, 128)))
model.add(Dropout(0.2))
model.add(Dense(128, activation='sigmoid'))
model.compile(loss='mse', optimizer='adam')
model.fit(x, y, nb_epoch=50, batch_size=4096)


我们来写个程序,看看我们训练出来的LSTM的效果:

def predict_next(input_array):x = np.reshape(input_array, (-1,seq_length,128))y = model.predict(x)return ydef string_to_index(raw_input):raw_input = raw_input.lower()input_stream = nltk.word_tokenize(raw_input)res = []for word in input_stream[(len(input_stream)-seq_length):]:res.append(w2v_model[word])return resdef y_to_word(y):word = w2v_model.most_similar(positive=y, topn=1)return word
def generate_article(init, rounds=30):in_string = init.lower()for i in range(rounds):n = y_to_word(predict_next(string_to_index(in_string)))in_string += ' ' + n[0][0]return in_string
init = 'Language Models allow us to measure how likely a sentence is, which is an important for Machine'
article = generate_article(init)
print(article)


3、用每日新闻预测金融市场变化,在这里我们会学习如何有效地使用word2vec。
其文本内容如下所示:

具体实现如下:
1、导入各种库以及文本

import pandas as pd
import numpy as np
from sklearn.metrics import roc_auc_score
from datetime import date
data = pd.read_csv(r'F:\南昌大学\自然语言处理\学习自然语言处理资料\课件资料\6DLinNLP\input\Combined_News_DJIA.csv')
data.head()


2、分割测试/训练集

train = data[data['Date'] < '2015-01-01']
test = data[data['Date'] > '2014-12-31']

然后,我们把每条新闻做成一个单独的句子,集合在一起:

X_train = train[train.columns[2:]]
corpus = X_train.values.flatten().astype(str)X_train = X_train.values.astype(str)
X_train = np.array([' '.join(x) for x in X_train])
X_test = test[test.columns[2:]]
X_test = X_test.values.astype(str)
X_test = np.array([' '.join(x) for x in X_test])
y_train = train['Label'].values
y_test = test['Label'].values

这里我们注意,我们需要三样东西:corpus是全部我们『可见』的文本资料。我们假设每条新闻就是一句话,把他们全部flatten()了,我们就会得到list of sentences。同时我们的X_train和X_test可不能随便flatten,他们需要与y_train和y_test对应。

corpus[:3]
X_train[:1]
y_train[:5]
from nltk.tokenize import word_tokenize
corpus = [word_tokenize(x) for x in corpus]
X_train = [word_tokenize(x) for x in X_train]
X_test = [word_tokenize(x) for x in X_test]
X_train[:2]
corpus[:2]



3、预处理
我们进行一些预处理来把我们的文本资料变得更加统一:
小写化
删除停止词
删除数字与符号
lemma

在这里插入代码片
from nltk.corpus import stopwords
stop = stopwords.words('english')
import re
def hasNumbers(inputString):return bool(re.search(r'\d', inputString))
def isSymbol(inputString):return bool(re.match(r'[^\w]', inputString))
from nltk.stem import WordNetLemmatizer
wordnet_lemmatizer = WordNetLemmatizer()
def check(word):word= word.lower()if word in stop:return Falseelif hasNumbers(word) or isSymbol(word):return Falseelse:return True
def preprocessing(sen):res = []for word in sen:if check(word):word = word.lower().replace("b'", '').replace('b"', '').replace('"', '').replace("'", '')res.append(wordnet_lemmatizer.lemmatize(word))return res

把我们三个数据组都来处理一下:

corpus = [preprocessing(x) for x in corpus]
X_train = [preprocessing(x) for x in X_train]
X_test = [preprocessing(x) for x in X_test]
print(corpus[553])
print(X_train[523])

在这里插入图片描述
4、训练NLP模型

from gensim.models.word2vec import Word2Vec
model = Word2Vec(corpus, size=128, window=5, min_count=5, workers=4)
model['ok']


5、用NLP模型表达我们的X
接着,我们于是就可以用这个坐标,来表示我们的之前干干净净的X。但是这儿有个问题。我们的vec是基于每个单词的,怎么办呢?由于我们文本本身的量很小,我们可以把所有的单词的vector拿过来取个平均值:

vocab = model.wv.vocab
def get_vector(word_list):res = np.zeros([128])count = 0for word in word_list:if word in vocab:res += model[word]count += 1return res/count
get_vector(['hello', 'from', 'the', 'other', 'side'])


这样,我们可以同步把我们的X都给转化成128维的一个vector list

wordlist_train = X_train
wordlist_test = X_test
X_train = [get_vector(x) for x in X_train]
X_test = [get_vector(x) for x in X_test]
print(X_train[10])


6、建立ML模型
这里,因为我们128维的每一个值都是连续关系的。不是分裂开考虑的。所以,道理上讲,我们是不太适合用RandomForest这类把每个column当做单独的variable来看的方法。(当然,事实是,你也可以这么用),好的,我们来看看比较适合连续函数的方法:SVM。

from sklearn.svm import SVR
from sklearn.model_selection import cross_val_scoreparams = [0.1,0.5,1,3,5,7,10,12,16,20,25,30,35,40]
test_scores = []
for param in params:clf = SVR(gamma=param)test_score = cross_val_score(clf, X_train, y_train, cv=3, scoring='roc_auc')test_scores.append(np.mean(test_score))
import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(params, test_scores)
plt.title("Param vs CV AUC Score");

总结

  本文详细介绍RNN算法,并且介绍了LSTM算法,通过pytourch来实现RNN核心代码。接着,我们又通过三个案例来让大家更加的熟悉RNN相关内容。希望大家能够动手操作,真正的掌握、理解该部分内容。这一部分在自然语言处理中是最为重要的,希望大家多多学好这门功课。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. LeetCode刷题笔记(5)

    LeetCode刷题笔记(5) 背景 今天主要刷的还是贪心算法的题目,应该是这个部分的题目本身就不难吧,感觉答案没有那么难以理解了。今天看了四道题目,其中也是第一次做hard级的题目,嗯,加油。 435、去除不重复区域 题目:计算让一组区间不重叠所需要移除的区间个数。 给定一个…...

    2024/4/16 3:21:56
  2. 练习4-6 猜数字游戏 (15分)

    猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该…...

    2024/4/1 2:58:31
  3. *POJ3616.Milking Time(dp)

    题目链接:http://poj.org/problem?id=3616 题意:给出n m r,m个挤奶时间段,每挤一次奶要休息r个时间点,两次挤奶的时间不可以有重叠,问n个时间点最多可以获得多少奶 解题思路:预处理m个时间段,将其按照起始时间由小到大进行排序,dp[i]表示到第i个时间段(使用时间点无法…...

    2024/4/16 3:22:21
  4. 虚拟歌手“成团出道”,作曲人、歌手要失业了?道翰天琼认知智能接口API平台机器人大脑。

    百度小度、小米小爱、B站泠鸢、微软小冰四位虚拟歌手在今天开幕的2020世界人工智能大会上“成团出道”。“虚拟天团”合唱的WAIC主题曲《智联家园》是全球首支人工智能作曲并由虚拟形象合唱的歌曲。歌曲创作与演唱属于需要创造性思维的工作,这难道意味着作曲人和歌手的工作会被…...

    2024/4/16 3:21:35
  5. zookeeper集群搭建和API使用

    一、vmware设置虚拟机centeros的ip 1、设置vm属性 先设置NAT模式点击菜单栏编辑记录子网网关地址2、修改linux配置 【1】修改linux ip地址 vi /etc/sysconfig/network-scripts/ifcfg-ens* (*根据实际情况不同,本文为ens33) vi /etc/sysconfig/network-scripts/ifcfg-ens33 B…...

    2024/4/16 3:23:48
  6. 疫情之后,人工智能该如何走?

    7月9日,2020世界人工智能大会云端峰会在上海正式召开。大会以“智联世界 共同家园”为主题,以“高端化、国际化、专业化、市场化、智能化”为特色,围绕智能领域的技术前沿、产业趋势和热点问题发表演讲和进行高端对话。 本次大会上,复旦大学附属华山医院感染科主任、复旦大…...

    2024/4/1 2:58:26
  7. day09_原题38/66/101/141/160/231/326/342

    1.环形链表(原题141) 给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:true 解释:链表中有一个环…...

    2024/4/16 3:22:16
  8. 13.3--Lifecycles

    在编写Android 应用程序的时候,可能经常会遇到需要感知Activity 生命周期的情况。比如说,某个界面中发起了一条网络请求,但是当请求得到响应的时候,界面或许已经关闭了,这个时候就不应该继续对响应的结果进行处理。因此,我们需要能够时刻感知到Activity 的生命周期,以便…...

    2024/4/16 3:24:03
  9. HTML 网页特殊符号代码大全

    在网页设计中,我们有时需要把以下两种字符显示在页面上:HTML的保留字符。 无法通过键盘输入但能表达某种特殊含义的字符。直接使用往往是无法显示的,这时就必须使用它们对应的实体名称或实体数字才能显示(在大多数浏览器中默认的字符集为ISO-8859-1)。下面做了整理,以备速…...

    2024/4/16 3:22:47
  10. ElasticSearch系列——入门

    文章目录简单的集群管理CRUD操作ElasticSearch系列——主目录简单的集群管理(1)快速的检查集群健康状况: GET /_cat/health?v集群的健康状况: green:每个索引的primary shard和replica shard都是active状态的 yellow:每个索引的primary shard都是active状态的,但是部分…...

    2024/4/16 3:22:11
  11. 实验

    在这里插入图片描述As2创建vlan: [sw1]vlan 1 [sw1-vlan1]q [sw1]int Vlan 1 [sw1-Vlanif1]ip add 10.2.11.2 24 [sw1-Vlanif1]q [sw1]int g 0/0/1 [sw1-GigabitEthernet0/0/1]port link-type access [sw1-GigabitEthernet0/0/1]port default vlan 1 [sw1]vlan 2 [sw1-vlan2]q…...

    2024/4/16 3:23:12
  12. 【跨平台导入】执行 conda env create -f *.yml 命令时出现 ResolvePackageNotFound:的解决方案

    参考:https://blog.csdn.net/weixin_42456051/article/details/103344209最终我的解决方案也是删除那种提示ResolvePackageNotFound的库,然后安装成功了,在新的平台有些需要的库使用pip单独安装即可!...

    2024/4/16 3:23:17
  13. 生成验证码图片 vue

    接上一篇生成验证码文章,经修改生成了一个简单验证码,供大家参考 identify.vue组件(主要用于定义参数和方法) <template><div class="s-canvas"><canvas id="s-canvas" :width="contentWidth" :height="contentHeight&q…...

    2024/4/1 2:58:19
  14. 如何注册gmail邮箱

    Gmail账号获取地址: www.getgmail.cn2020.02.29日更 现在每天找我注册的人比较多,完全是应接不过来,而且知乎消息私信不即时(也许是我手机的毛病,只有打开软件时才有提示),而且有些网友可能是由于比较着急,我这边一长时间不回复,他就开始语言攻击,这就给我造成了比较大…...

    2024/4/16 3:21:56
  15. 数学之美——第三章摘要(统计语言模型)

    数学之美——统计语言模型假定S表示某一个有意义的句子,由一连串特定顺序排列的词w1,w2…wn组成,这里n是句子的长度。现在,我们想知道S在文本中出现的可能性,也就是数学上所说的S的概率P(S)。因此,需要有个模型来估算。既然S = w1,w2…,wn,那么不妨把P(S)展开表示: P(w1, w…...

    2024/4/16 3:23:07
  16. 玩转内容、社交、流量,小鹅通助力企业赢得下一个常态

    文|曾响铃来源|科技向令说(xiangling0815)导语:2020年,一场面对全人类的“黑天鹅”事件出现,改变了无数人的命运,也一定程度重构了许多场景与行业的底层逻辑。可以预见,此次“黑天鹅”事件将会进一步加快全社会数字化发展的进程。毫无疑问,线上与线下融合一体的商业模式…...

    2024/4/16 3:23:07
  17. 信息熵、信息增益以及决策树

    什么是信息熵?信息熵是信息论的范畴,利用概率论和统计的方法,因此信息熵也被称为基于概率分布的信息熵。在介绍信息熵概念之前,先介绍一个基本的概念:区分能力。所谓区分能力是指把对象划分到具体分组的能力,比如金庸武侠小说里的英雄人物,每一个武侠人物都是性别、智商…...

    2024/4/16 3:22:57
  18. Python入门项目——飞机大战

    文章目录项目描述Pygame 安装Windows 平台下安装Linux 平台安装开始编写项目创建 pygame 窗口设置背景色创建设置类添加飞船图像创建 Ship 类在屏幕上绘制飞船重构:模块 game_func函数 check_events()函数 update_screen()操作飞船响应按键允许不断移动调整飞船的速度限制飞船…...

    2024/4/17 15:26:18
  19. 数学之美第三章摘要(统计语言模型)

    数学之美——统计语言模型假定S表示某一个有意义的句子,由一连串特定顺序排列的词w1,w2…wn组成,这里n是句子的长度。现在,我们想知道S在文本中出现的可能性,也就是数学上所说的S的概率P(S)。因此,需要有个模型来估算。既然S = w1,w2…,wn,那么不妨把P(S)展开表示: P(w1, w…...

    2024/4/16 3:23:12
  20. 一、let和const命令(ECMAScript6,简称ES6)

    参考链接 1、let命令 基本用法 ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。 {let a = 10;var b = 1; } a // ReferenceError: a is not defined. b // 1上面代码在代码块之中,分别用let和var声明了两个变量。然后…...

    2024/4/16 3:22:52

最新文章

  1. Windows如何下载Bun并在前端Vue或React项目上替代Yarn或Npm

    Bun Bun网站 Bun 在 Windows 上下载并安装 Bun 非常简单。你可以使用以下命令在 Windows 10 或更高版本上安装 Bun powershell -c "irm bun.sh/install.ps1 | iex"“powershell”不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件 PowerShell 命令解决…...

    2024/4/18 13:24:24
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 安卓java打包uniapp原生插件 和 uniapp使用安卓android原生插件

    1.uniapp dcloud官方文档 简介 | uni小程序SDK 2.前提&#xff0c;需要有经验的安卓java开发人员&#xff0c;并且同时具备uniapp移动端开发经验。说明&#xff1a;android打包的.aar和uniapp需要的.aar是不一样的&#xff0c;uniapp需要的.aar是需要有一些特定配置的&#x…...

    2024/4/17 10:12:57
  4. 如何转行成为产品经理?

    转行NPDP也是很合适的一条发展路径&#xff0c;之后从事新产品开发相关工作~ 一、什么是NPDP&#xff1f; NPDP 是产品经理国际资格认证&#xff0c;美国产品开发与管理协会&#xff08;PDMA&#xff09;发起的&#xff0c;是目前国际公认的唯一的新产品开发专业认证&#xff…...

    2024/4/18 6:17:26
  5. 探索进程控制第一弹(进程终止、进程等待)

    文章目录 进程创建初识fork函数fork函数返回值fork常规用法fork调用失败的原因 写时拷贝进程终止进程终止是在做什么&#xff1f;进程终止的情况代码跑完&#xff0c;结果正确/不正确代码异常终止 如何终止 进程等待概述进程等待方法wait方法waitpid 进程创建 初识fork函数 在…...

    2024/4/18 6:17:26
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/18 0:33:31
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/17 20:29:59
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/18 9:45:31
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/17 2:33:17
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/17 7:50:46
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/18 3:56:01
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/18 3:56:04
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/18 3:55:30
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/18 3:55:54
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/18 3:55:45
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/17 21:50:30
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/15 13:53:08
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/15 9:16:52
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/18 9:24:29
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/18 3:56:18
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/18 3:55:57
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/18 3:55:50
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/15 23:28:22
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/18 3:56:20
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/18 3:56:11
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57