自然语言处理入门

使用RNN模型构建人名分类器

  • 以一个人名为输入,使用模型帮助判断最有可能是来自哪一个国家的人名,在某些国际化公司的业务中具有重要意义,例如在用户注册过程中,会根据用户填写的名字直接分配可能的国家或地区,并限制其手机号码位数等。

  • 整个案例实现可以分为五个步骤:

    • 导入工具包
    • 对data文件中的数据进行处理,满足训练需求
    • 构建RNN模型(包括传统RNN,LSTM及GRU)
    • 构建训练函数并进行训练
    • 构建评估函数并进行预测

导入工具包

from io import open
# 帮助使用正则表达式进行子目录的查询
import glob
import os
# 用于获得常见字母及字符规范化
import string
import unicodedata
# 导入随机工具random
import random
# 导入时间和数学工具包
import time
import math
# 导入torch工具
import torch
# 导入nn准备构建模型
import torch.nn as nn
# 导入制图工具包
import matplotlib.pyplot as plt

对data文件中的数据进行处理

  • 获取所有常用字符包括字母,标点
all_letters = string.ascii_letters + " .,;\'"
# 获取常用字符数量
n_letters = len(all_letters)
print("n_letter: ", n_letters)n_letter:  57
  • 字符规范化之unicode转Ascii函数:
# 暂时不考虑编码问题
# 我们认为这个函数的作用就是去除掉一些语言中的重音标记
# 如Ślusàrski ---> Slusarski
def unicodeToAscii(s):return ''.join(c for c in unicodedata.normalize('NFD', s)if unicodedata.category(c) != 'Mn'and c in all_letters)s = 'Ślusàrski'
print(unicodeToAscii(s))Slusarski
  • 构建一个读取文件内容到内存的函数:
data_path = './data/names/'
def readLines(filename):# 打开指定文件并读取所有内容,使用strip()去掉两侧空白符,然后以'\n'进行切割lines = open(filename, encoding='utf-8').read().strip().split('\n')# 对应每个lines列表中的名字进行Ascii转换,使其规范化,最后返回一个名字列表return [unicodeToAscii(line) for line in lines]# filename是数据集中某个具体文件
filename = data_path + "Chinese.txt"
lines = readLines(filename)
print(lines)['Ang', 'AuYong', 'Bai', 'Ban', 'Bao', 'Bei', 'Bian', 'Bui', 'Cai', 'Cao', 'Cen', 'Chai', 'Chaim', 'Chan', 'Chang', ..., 'Zhang', 'Zhi', 'Zhuan', 'Zhui']
  • 构建人名类别(所属的语言)列表与人名对应关系字典:
# 构建的category_lines形如:{'English':['Lily', "Susan"], "Chinese":["Zhang"]}
category_lines = {}# all_categories形如:['English', ..., 'Chinese']
all_categories = []# 读取指定路径下的txt文件,使用glob,path中可以使用正则表达式
for filename in glob.glob(data_path + '*.txt'):# 获取每个文件的文件名, 就是对应的名字类别category = os.path.splitext(os.path.basename(filename))[0]# 将其装到all_categoriesall_categories.append(category)# 然后读取每个文件内容,形成名字列表lines = readLines(filename)# 按照对应类别,将名字列表写入category_lines字典中category_lines[category] = linesn_categories = len(all_categories)
print('n_categories', n_categories)
print(category_lines['Italian'][:10])n_categories 18
['Abandonato', 'Abatangelo', 'Abatantuono', 'Abate', 'Abategiovanni', 'Abatescianni', 'Abba', 'Abbadelli', 'Abbascia', 'Abbatangelo']
  • 将人名转化为one-hot张量表示:
def lineToTensor(line):# 首先初始化一个0张量,它的形状(len(line), 1, n_letters)# 代表人名中每一个字母用一个1乘n_letters张量表示tensor = torch.zeros(len(line), 1, n_letters)# 遍历这个人名中每个字符索引和字符for li, letter in enumerate(line):# 使用字符串方法找到每个字符在all_letters中索引# 它也是我们生成onehot张量中1的索引位置tensor[li][0][all_letters.find(letter)] = 1# 返回结果return tensorline = 'Bai'
line_tensor = lineToTensor(line)
print("line_tensor: ", line_tensor)line_tensor:  tensor([[[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.,0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,0., 0., 0., 0., 0., 0.]],[[1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,0., 0., 0., 0., 0., 0.]],[[0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.,0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,0., 0., 0., 0., 0., 0.]]])

构建RNN模型

  • 构建传统的RNN模型
# 使用nn.RNN构建完成传统RNN使用类
class RNN(nn.Module):def __init__(self, input_size, hidden_size, output_size, num_layers = 1):'''Parameters----------input_size : 输入最后一维尺寸.hidden_size : 隐层最后一维尺寸.output_size : TYPE输出的维度.num_layers : TYPE, optionalRNN层数. The default is 1.Returns-------None.'''super(RNN, self).__init__()# 将参数传入self.input_size = input_sizeself.output_size = output_sizeself.hidden_size = hidden_sizeself.num_layers = num_layers# 实例化定义的nn.RNN,它的三个参数分别是input_size, hidden_size, num_layersself.rnn = nn.RNN(input_size, hidden_size, num_layers)# 实例化nn.Linear,这个线性层用于将nn.RNN的输出维度转化为指定输出维度self.linear = nn.Linear(hidden_size, output_size)# 实例化nn中预定的Softmax层,用于从输出层获得类别结果self.softmax = nn.LogSoftmax(dim=-1)def forward(self, input, hidden):'''完成RNN中的主要逻辑Parameters----------input : 输入张量,形状是1×n_letters.hidden : 隐层张量,它的形状是self.num_layers × 1 × self.hidden_size.Returns-------self.softmax(self.linear(rr)), hn.'''# 因为预定义的nn.RNN要求输入维度一定是三维张量,所以扩展一个维度input = input.unsqueeze(0)# 将input和hidden输入到传统RNN实例化对象中,如果num_layers=1,rr恒等于hnrr, hn = self.rnn(input, hidden)# 将从RNN中获得的结果通过线性变换和softmanx返回,同时返回hn作为后续RNN的输入return self.softmax(self.linear(rr)), hndef initHidden(self):'''初始化隐层张量Returns-------torch.zeros(self.num_layers, 1, self.hidden_size).'''# 初始化一个(self.num_layers, 1, self.hidden_size)形状的0张量return torch.zeros(self.num_layers, 1, self.hidden_size)
  • 构建LSTM模型
# 使用nn.LSTM构建完成LSTM使用类
class LSTM(nn.Module):def __init__(self, input_size, hidden_size, output_size, num_layers = 1):'''初始化函数参数与RNN相同Parameters----------input_size : 输入最后一维尺寸.hidden_size : 隐层最后一维尺寸.output_size : TYPE输出的维度.num_layers : TYPE, optionalRNN层数. The default is 1.Returns-------None.'''super(LSTM, self).__init__()# 将参数传入self.input_size = input_sizeself.output_size = output_sizeself.hidden_size = hidden_sizeself.num_layers = num_layers# 实例化定义的nn.LSTM,它的三个参数分别是input_size, hidden_size, num_layersself.lstm = nn.LSTM(input_size, hidden_size, num_layers)# 实例化nn.Linear,这个线性层用于将nn.RNN的输出维度转化为指定输出维度self.linear = nn.Linear(hidden_size, output_size)# 实例化nn中预定的Softmax层,用于从输出层获得类别结果self.softmax = nn.LogSoftmax(dim=-1)def forward(self, input, hidden, c):'''完成LSTM中的主要逻辑Parameters----------input : 输入张量,形状是1×n_letters.hidden : 隐层张量,它的形状是self.num_layers × 1 × self.hidden_size.c : LSTM中的细胞状态张量.Returns-------self.softmax(self.linear(rr)), hn, c.'''# 因为预定义的nn.RNN要求输入维度一定是三维张量,所以扩展一个维度input = input.unsqueeze(0)# 将input和hidden以及初始化的c输入到lstm中rr, (hn, c) = self.lstm(input, (hidden, c))# 将从RNN中获得的结果通过线性变换和softmanx返回,同时返回hn作为后续RNN的输入并更新细胞状态return self.softmax(self.linear(rr)), hn, cdef initHiddenAndC(self):'''初始化隐层张量Returns-------hidden, c.'''# 初始化一个(self.num_layers, 1, self.hidden_size)形状的0张量以及c,他们形状相同c = hidden = torch.zeros(self.num_layers, 1, self.hidden_size)return hidden, c
  • 构建GRU模型
# 使用nn.GRU构建完成GRU使用类
# GRU与传统RNN的外部形式相同,都是只传递隐层张量,因此只需要更改预定义层的名字
class GRU(nn.Module):def __init__(self, input_size, hidden_size, output_size, num_layers = 1):'''Parameters----------input_size : 输入最后一维尺寸.hidden_size : 隐层最后一维尺寸.output_size : TYPE输出的维度.num_layers : TYPE, optionalRNN层数. The default is 1.Returns-------None.'''super(GRU, self).__init__()# 将参数传入self.input_size = input_sizeself.output_size = output_sizeself.hidden_size = hidden_sizeself.num_layers = num_layers# 实例化定义的nn.GRU,它的三个参数分别是input_size, hidden_size, num_layersself.gru = nn.GRU(input_size, hidden_size, num_layers)# 实例化nn.Linear,这个线性层用于将nn.RNN的输出维度转化为指定输出维度self.linear = nn.Linear(hidden_size, output_size)# 实例化nn中预定的Softmax层,用于从输出层获得类别结果self.softmax = nn.LogSoftmax(dim=-1)def forward(self, input, hidden):'''完成RNN中的主要逻辑Parameters----------input : 输入张量,形状是1×n_letters.hidden : 隐层张量,它的形状是self.num_layers × 1 × self.hidden_size.Returns-------self.softmax(self.linear(rr)), hn.'''# 因为预定义的nn.GRU要求输入维度一定是三维张量,所以扩展一个维度input = input.unsqueeze(0)# 将input和hidden输入到传统GRU实例化对象中,如果num_layers=1,rr恒等于hnrr, hn = self.gru(input, hidden)# 将从RNN中获得的结果通过线性变换和softmanx返回,同时返回hn作为后续GRU的输入return self.softmax(self.linear(rr)), hndef initHidden(self):'''初始化隐层张量Returns-------torch.zeros(self.num_layers, 1, self.hidden_size).'''# 初始化一个(self.num_layers, 1, self.hidden_size)形状的0张量return torch.zeros(self.num_layers, 1, self.hidden_size)
  • 实例化参数:
# 因为是onehot编码,输入张量最后一维尺寸就是n_letters
input_size = n_letters
# 定义隐层的最后一维尺寸大小
n_hidden = 128
# 输出尺寸为语言类别总数n_categories
output_size = n_categories
# num_layer使用默认值1# 假如以字母B作为RNN首次输入,通过lineToTensor转为张量
# 因为lineToTensor输出是三维张量,而RNN类需要二维张量
# 因此需要使用squeeze(0)降低一个维度
input = lineToTensor('B').squeeze(0)# 初始化一个三维的隐层0张量,也就是初始细胞状态张量
hidden = c = torch.zeros(1, 1, n_hidden)# 调用
rnn = RNN(n_letters, n_hidden, n_categories)
lstm = LSTM(n_letters, n_hidden, n_categories)
gru = GRU(n_letters, n_hidden, n_categories)rnn_output, next_hidden = rnn(input, hidden)
print('rnn:', rnn_output)
lstm_output, next_hidden, c = lstm(input, hidden, c)
print('lstm:', lstm_output)
gru_output, next_hidden = gru(input, hidden)
print('gru:', gru_output)rnn: tensor([[[-2.8331, -2.9564, -2.7444, -2.8873, -3.0144, -2.8921, -2.9993,-2.8616, -2.8584, -2.9508, -2.8577, -2.9920, -2.9023, -2.8029,-2.7954, -2.9758, -2.9047, -2.8477]]], grad_fn=<LogSoftmaxBackward>)
lstm: tensor([[[-2.8993, -2.9749, -2.8188, -2.8973, -2.8329, -2.8795, -2.9100,-2.9440, -2.9793, -2.8052, -2.8427, -2.9326, -2.8233, -2.8597,-2.9480, -2.8460, -2.8935, -2.9671]]], grad_fn=<LogSoftmaxBackward>)
gru: tensor([[[-2.8107, -2.9070, -2.8710, -2.8599, -2.9110, -3.0012, -3.0116,-2.8663, -2.8228, -2.8659, -2.8145, -2.8629, -2.9072, -2.8821,-2.9657, -2.9611, -2.8662, -2.8690]]], grad_fn=<LogSoftmaxBackward>)

构建训练函数并进行训练

  • 从输出结果中获得指定类别函数
def categoryFromOutput(output):'''从输出结果中获取指定类别,参数为输出张量outputParameters----------output : 输出张量output.Returns-------语言类别和索引值.'''# 从输出张量中返回最大的值和索引对象,这里主要需要这个索引top_n, top_i = output.topk(1)# top_i对象中取出索引的值category_i = top_i[0].item()# 根据索引值获得对应语言类别,返回语言类别和索引值return all_categories[category_i], category_icategory, category_i = categoryFromOutput(gru_output)
print('category:', category)
print('category_i:', category_i)category: Japanese
category_i: 10
  • 随机产生训练数据
def randomTrainingExample():'''该函数用于随机产生训练数据Returns-------category, line, category_tensor, line_tensor.'''# 首先使用random的choice方法从all_categories随机选择一个类别category = random.choice(all_categories)# 然后通过category.lines字典取该类对应的名字列表# 之后再从列表中随机取一个名字line = random.choice(category_lines[category])# 接着将这个类别在所有类别列表中的索引封装成tensor,得到张量类别category_tensorcategory_tensor = torch.tensor([all_categories.index(category)], dtype=torch.long)# 最后将随即取到的名字通过函数lineToTensor转化为onehot张量表示line_tensor = lineToTensor(line)return category, line, category_tensor, line_tensor
  • 构建传统RNN训练函数
# 定义损失函数nn.NLLLoss,因为RNN的最后一层是nn.LogSoftmax,两者内部计算逻辑吻合
criterion = nn.NLLLoss()# 设置学习率
learning_rate = 0.05def trainRNN(category_tensor, line_tensor):'''定义训练函数Parameters----------category_tensor : 训练数据的标签(张量).line_tensor : 训练数据(张量).Returns-------结果和损失值.'''# 在函数中,首先通过实例化对象rnn初始化隐层张量hidden = rnn.initHidden()# 然后将模型结构中的梯度归零rnn.zero_grad()# 下面开始训练,将训练数据line_tensor每个字符for i in range(line_tensor.size()[0]):output, hidden = rnn(line_tensor[i], hidden)# 因为对象由nn.RNN实例化得到,最终输出结果是三维张量,为满足category_tensor# 进行对比计算损失,需要减少第一个维度,使用squeeze()方法loss = criterion(output.squeeze(0), category_tensor)# 损失进行反向传播loss.backward()# 更新模型中所有参数for p in rnn.parameters():# 将参数张量表示与参数的梯度乘以学习率的结果相加以此来更新参数p.data.add_(-learning_rate, p.grad.data)# 返回结果和损失的值return output, loss.item()
  • 构建LSTM训练函数和GRU训练函数
# 与传统RNN相比多出了细胞状态
def trainLSTM(category_tensor, line_tensor):hidden, c = lstm.initHiddenAndC()lstm.zero_grid()for i in range(line_tensor.size()[0]):output, hidden, c = lstm(line_tensor[i], hidden, c)loss = criterion(output.squeeze(0), category_tensor)loss.backward()for p in lstm.parameters():p.data.add_(-learning_rate, p.grad.data)return output, loss.item()# 代码层面与RNN完全相同
def trainGRU(category_tensor, line_tensor):hidden = gru.initHidden()gru.zero_grad()for i in range(line_tensor.size()[0]):output, hidden = gru(line_tensor[i], hidden)loss = criterion(output.squeeze(0), category_tensor)loss.backward()for p in gru.parameters():p.data.add_(-learning_rate, p.grad.data)return output, loss.item()
  • 构建时间计算函数
def timeSince(since):'''获得每次打印的训练耗时Parameters----------since : 训练开始的时间.Returns-------指定格式的耗时.'''now = time.time()s = now - sincem = math.floor(s / 60) # 向下取整s -= m*60return '%dmins %dsecs' % (m, s)
  • 构建训练过程的日志打印函数
# 设置训练迭代次数
n_iters = 1000
# 设置结果的打印间隔
print_every = 50
# 设置绘制损失曲线上的制图间隔
plot_every = 10def train(train_type_fn):'''训练过程的日志打印函数Parameters----------train_type_fn : 选择哪种模型训练函数,例如trainRNN.Returns-------None.'''# 每个制图间隔损失保存列表all_losses = []# 获得训练开始时间戳start = time.time()# 设置初始间隔损失为0current_loss = 0# 从1开始进行训练迭代,共n_iters次for iter in range(1, n_iters+1):# 通过randomTrainingExample函数随机获取一组训练数据和对应类别category, line, category_tensor, line_tensor = randomTrainingExample()# 将训练数据和对应类别张量表示传入到train函数中output, loss = train_type_fn(category_tensor, line_tensor)# 计算制图间隔中的总损失current_loss += loss# 如果迭代数能够打印间隔if iter % print_every ==0:# 取该迭代步上的output通过categoryFromOutput函数获得对应类别和类别索引guess, guess_i = categoryFromOutput(output)# 和真实类别做比较correct = 'True' if guess == category else 'False(%s)' % category# 打印迭代步,迭代步百分比,当前训练耗时,损失,该步预测名字,是否正确print('%d %d%% (%s) %.4f %s / %s %s' % (iter, iter/n_iters*100, timeSince(start), loss, line, guess, correct))# 绘图间隔if iter % plot_every ==0:# 将保存该间隔的平均损失到all_losses列表中all_losses.append(current_loss / plot_every)# 间隔损失重置为0current_loss = 0# 返回对应总损失列表和训练耗时return all_losses, int(time.time() - start) 
  • 开始训练传统RNN、LSTM、GEU模型并制作对比图
# 设置训练迭代次数
n_iters = 1000
# 设置结果的打印间隔
print_every = 50
# 设置绘制损失曲线上的制图间隔
plot_every = 10def train(train_type_fn):'''训练过程的日志打印函数Parameters----------train_type_fn : 选择哪种模型训练函数,例如trainRNN.Returns-------None.'''# 每个制图间隔损失保存列表all_losses = []# 获得训练开始时间戳start = time.time()# 设置初始间隔损失为0current_loss = 0# 从1开始进行训练迭代,共n_iters次for iter in range(1, n_iters+1):# 通过randomTrainingExample函数随机获取一组训练数据和对应类别category, line, category_tensor, line_tensor = randomTrainingExample()# 将训练数据和对应类别张量表示传入到train函数中output, loss = train_type_fn(category_tensor, line_tensor)# 计算制图间隔中的总损失current_loss += loss# 如果迭代数能够打印间隔if iter % print_every ==0:# 取该迭代步上的output通过categoryFromOutput函数获得对应类别和类别索引guess, guess_i = categoryFromOutput(output)# 和真实类别做比较correct = 'True' if guess == category else 'False(%s)' % category# 打印迭代步,迭代步百分比,当前训练耗时,损失,该步预测名字,是否正确print('%s: %d %d%% (%s) %.4f %s / %s %s' % (train_type_fn.__name__, iter, iter/n_iters*100, timeSince(start), loss, line, guess, correct))with open(train_type_fn.__name__ + '.txt', 'a') as file0:print('%d %d%% (%s) %.4f %s / %s %s' % (iter, iter/n_iters*100, timeSince(start), loss, line, guess, correct), file=file0)# 绘图间隔if iter % plot_every ==0:# 将保存该间隔的平均损失到all_losses列表中all_losses.append(current_loss / plot_every)# 间隔损失重置为0current_loss = 0# 返回对应总损失列表和训练耗时return all_losses, int(time.time() - start) 
  • 训练的部分结果和图像如下所示:
200 20% (0m 1s) 2.8526 Bellamy / English False(French)
400 40% (0m 2s) 1.8337 Antonopoulos / Greek True
800 80% (0m 7s) 3.2786 Woo / Czech False(Chinese)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-79KE4ppn-1635680570246)(C:\Users\Lancibe\Desktop\损失曲线.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FxIiEetD-1635680570248)(C:\Users\Lancibe\Desktop\耗时柱状图.png)]

  • 可以发现不管是哪一种模型,False都占了大多数。这样的结果主要原因是训练次数太少,输出结果并不理想。

  • 下面是运行十万次后的图象:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OKGGZXZh-1635680570251)(C:\Users\Lancibe\Desktop\损失率1.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5mSWD662-1635680570252)(C:\Users\Lancibe\Desktop\时间1.png)]

  • 损失对比曲线分析:模型训练的损失降低快慢代表模型收敛程度,由图可知,传统RNN模型的收敛情况最好,然后是GRU,最后是LSTM。这是因为:我们当前处理的文本数据是人名,长度有限,且长距离字母间基本没有特定关联,因此无法发挥改进模型LSTM和GRU的长距离捕捉语义关联的优势,所以在以后的模型选用时,要通过对任务的分析以及实验对比,选择最合适的模型。

  • 训练耗时对比图分析:模型训练的耗时长短代表模型的计算复杂度。我们可以根据图发现,传统RNN的复杂度很低,几乎是后两者的一半,然后是GRU,最后是LSTM。

构建评估函数并进行评测

  • 构建评估函数
def evaluateRNN(line_tensor):'''评估函数,逻辑和训练函数相同Parameters----------line_tensor : 名字的张量表示.Returns-------None.'''# 初始化隐层张量hidden = rnn.initHidden()# 将评估数据line_tensor每个字符逐个传入rnn中for i in range(line_tensor.size()[0]):output, hidden = rnn(line_tensor[i], hidden)# 获得输出结果return output.squeeze(0)def evaluateLSTM(line_tensor):hidden, c = lstm.initHiddenAndC()for i in range(line_tensor.size()[0]):output, hidden, c = lstm(line_tensor[i], hidden, c)return output.squeeze(0)def evaluateGRU(line_tensor):hidden = gru.initHidden()for i in range(line_tensor.size()[0]):output, hidden = gru(line_tensor[i], hidden)return output.squeeze(0)#line = 'Zhang'
#line_tensor = lineToTensor(line)
#rnn_output = evaluateRNN(line_tensor)
#lstm_output = evaluateLSTM(line_tensor)
#gru_output = evaluateGRU(line_tensor)
#print(rnn_output)
#print(lstm_output)
#print(gru_output)tensor([[-3.5773, -2.0988, -5.1781, -3.1590, -3.2170, -4.0893, -4.3061, -4.2271,-3.2636, -3.1062, -3.9020, -0.7948, -5.3064, -3.8007, -4.0158, -4.0093,-4.5094, -2.4414]], grad_fn=<SqueezeBackward1>)
tensor([[-2.6393, -2.8724, -3.0469, -2.9063, -2.9979, -2.7807, -2.8535, -2.8309,-2.8880, -3.0629, -3.0885, -2.7007, -2.8724, -2.9484, -2.8637, -2.7832,-2.8150, -3.2597]], grad_fn=<SqueezeBackward1>)
tensor([[-2.7454, -2.5936, -2.8496, -2.5222, -3.2314, -3.2224, -2.8892, -2.9692,-2.6086, -3.1576, -3.1461, -2.8338, -3.1694, -2.8322, -2.7507, -2.9711,-3.1019, -2.8547]], grad_fn=<SqueezeBackward1>)
  • 构建预测函数
def predict(input_line, evaluate_fn, n_predictions=3):'''预测函数Parameters----------input_line : 输入的名字.evaluate_fn :评估的模型函数,RNN,LSTM,GRUn_predictions : 要娶最有可能的多少个. The default is 3.Returns-------None.'''print('\n> %s' % input_line)# 不进行求梯度with torch.no_grad():# 使输入名字转为张量表示,并使用evaluate_fn函数获得预测输出output = evaluate_fn(lineToTensor(input_line))# 取最大的值和索引topv, topi = output.topk(n_predictions, 1, True)# 创建承装结果列表predictions = []# 遍历n_predictionsfor i in range(n_predictions):# 从topv中取出output值value = topv[0][i].item()# 取出索引并找到对应类别category_index = topi[0][i].item()# 打印output值,和对应类别print('(%.2f) %s' % (value, all_categories[category_index]))# 将结果装进predictions中predictions.append([value, all_categories[category_index]])return predictions# 简单调用验证
for evaluate_fn in [evaluateRNN, evaluateLSTM, evaluateGRU]:print('%s:\n', evaluate_fn.__name__)predict('Dovesky', evaluate_fn)predict('Jackson', evaluate_fn)predict('Satoshi', evaluate_fn)RNN> Dovesky
(-0.08) Russian
(-3.15) English
(-3.84) Czech> Jackson
(-0.28) Scottish
(-1.77) Russian
(-2.69) English> Satoshi
(-0.65) Arabic
(-1.84) Japanese
(-1.97) ItalianLSTM> Dovesky
(-1.18) Russian
(-1.36) Polish
(-1.56) Czech> Jackson
(-0.41) Scottish
(-2.17) Polish
(-2.50) English> Satoshi
(-0.32) Japanese
(-1.93) Arabic
(-2.54) PolishGRU> Dovesky
(-0.85) Czech
(-1.19) Russian
(-2.45) English> Jackson
(-0.30) Scottish
(-2.20) English
(-3.18) Polish> Satoshi
(-0.80) Japanese
(-0.96) Arabic
(-2.70) Polish

s[category_index]])
return predictions

简单调用验证

for evaluate_fn in [evaluateRNN, evaluateLSTM, evaluateGRU]:
print(’%s:\n’, evaluate_fn.name)
predict(‘Dovesky’, evaluate_fn)
predict(‘Jackson’, evaluate_fn)
predict(‘Satoshi’, evaluate_fn)

RNN

Dovesky
(-0.08) Russian
(-3.15) English
(-3.84) Czech

Jackson
(-0.28) Scottish
(-1.77) Russian
(-2.69) English

Satoshi
(-0.65) Arabic
(-1.84) Japanese
(-1.97) Italian

LSTM

Dovesky
(-1.18) Russian
(-1.36) Polish
(-1.56) Czech

Jackson
(-0.41) Scottish
(-2.17) Polish
(-2.50) English

Satoshi
(-0.32) Japanese
(-1.93) Arabic
(-2.54) Polish

GRU

Dovesky
(-0.85) Czech
(-1.19) Russian
(-2.45) English

Jackson
(-0.30) Scottish
(-2.20) English
(-3.18) Polish

Satoshi
(-0.80) Japanese
(-0.96) Arabic
(-2.70) Polish

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

相关文章

  1. Leetcode刷题java之500(键盘行)

    执行结果&#xff1a; 通过 显示详情 添加备注 执行用时&#xff1a;5 ms, 在所有 Java 提交中击败了18.37%的用户 内存消耗&#xff1a;36.6 MB, 在所有 Java 提交中击败了17.64%的用户 通过测试用例&#xff1a;22 / 22 思路&#xff1a;思路就是直接将每行字母大小写作…...

    2024/4/6 11:57:39
  2. 大数问题(1)——大数存储

    有改动转载&#xff0c;写成了更方便自己理解的&#xff0c;原文请点击链接C/C&#xff1a; 基本方法是&#xff1a;用数组或字符串存放和表示大整数。一个数组或字符串元素&#xff0c;存放大整数中的一位。 例如&#xff1a; 大数&#xff1a;1545485785212454510 用字符串…...

    2024/4/15 14:52:13
  3. 【二叉树】剑指offer 78 把二叉树打印成多行

    描述 给定一个节点数为 n 二叉树&#xff0c;要求从上到下按层打印二叉树的 val 值&#xff0c;同一层结点从左至右输出&#xff0c;每一层输出一行&#xff0c;将输出的结果存放到一个二维数组中返回。 例如&#xff1a; 给定的二叉树是{1,2,3,#,#,4,5} 该二叉树多行打印层序…...

    2024/4/15 14:51:53
  4. 数据库中文乱码

    在.sql文件开头位置添加SET NAMES utf8;...

    2024/4/16 22:47:38
  5. latex 行内公式

    ...

    2024/4/15 14:52:03
  6. PointPillars: Fast Encoders for Object Detection from Point Clouds 论文学习笔记

    Abstract 这篇论文是采用一个Encoder 的模式来编码点云使之适应下游的检查任务。 现有的文献中提供了两种类型的Encoder。一种是固定的编码器&#xff0c;这种encoder往往速度快&#xff0c;但牺牲了准确性&#xff1b;另一种是从数据中学习的编码器&#xff0c;这种编码更准…...

    2024/4/15 14:52:03
  7. [CF1161F]Zigzag Game

    Zigzag Game 题解 对于原边权需要的上升与下降我们可以通过翻转边权来进行处理&#xff0c;下面不妨设我们需要边权递增。 如果我们才走了(a,b)(a,b)(a,b)&#xff0c;如果对于任意的ccc存在唯一的ddd使得w(c,d)>w(b,c)∧w(a,b)>w(b,c)w(c,d)>w(b,c)\wedge w(a,b)&g…...

    2024/4/17 10:26:40
  8. linux常用命令-压缩解压命令

    .gz gzip压缩 gunzip解压 只能压缩文件&#xff0c;且不保留原文件 tar【.tar .tar.gz .tar.bz2】 语法&#xff1a;tar -zcf test.tar.gz /etc -c 压缩 -x 解包 -v 显示详细信息 -f 指定解压文件 -z 解压缩 .tar.bz2格式 > tar -cjf -xjf 压缩不保留原文件 zip[.zip] 选项…...

    2024/4/15 14:52:08
  9. JavaWeb上

    一、基本概念 1.1、前言 web开发&#xff1a;1. web&#xff0c;网络的意思2. 静态web&#xff1a;eg:html、css 提供给所有人的页面都不会发生变化3. 动态web&#xff1a;eg:几乎所有的网站 在java中&#xff0c;动态web资源开发的技术统称为javaweb1.2、web应用程序 web应…...

    2024/4/5 7:13:50
  10. Leetcode 26-27,双指针 (删除数组相同元素移除元素)

    26. 删除有序数组中的重复项 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成…...

    2024/4/15 14:52:03
  11. 3.1数据结构瑞格数组

    nefu瑞格数组 –题目来源-nefu瑞格 4188 C 4189 A 4198 #include <stdio.h> #include <malloc.h>void LatinMatrix(int **a,int n) {// write your code hereint i,j;for(i0;i<n;i){a[0][i]i1;a[i][0]i1;}for(i1;i<n;i)for(j1;j<n;j){if(a[i][j-1]…...

    2024/4/26 4:08:20
  12. 数据库——关系数据库

    关系数据库 关系模型 关系数据结构 域是一组具有相同数据类型的值的集合&#xff1b;&#xff1b;笛卡尔积可以看着是关系的域&#xff0c;由域上的值构成的&#xff1b;&#xff1b;笛卡尔积的大小用基数来表示 (1)关系D1 X D2X … D,的子集叫作在域D1, D2, …&#xff0c…...

    2024/4/20 11:03:16
  13. QT第三天.2

    QT第三天 二.QMainwindow 1.QMainwindow的组成 &#xff08;1&#xff09;菜单栏 &#xff08;2&#xff09;工具栏 &#xff08;3&#xff09;锚接部件 &#xff08;4&#xff09;状态栏 &#xff08;5&#xff09;中心部件 2.菜单栏 一般来说&#xff0c;菜单栏只有一…...

    2024/4/17 22:24:44
  14. ETH价格为何如此稳定上升

    比特币价格反复下跌&#xff0c;以太坊稳定上涨离不开价值的增长。最近比特币价格很不稳定&#xff0c;上涨的时候币圈一阵欢呼&#xff0c;当下跌的时候&#xff0c;币圈又是一片哀嚎。但是相对以太坊来说&#xff0c;以太坊这段时间的浮动还是比较稳定的&#xff0c;浮动不算…...

    2024/4/26 10:58:30
  15. Java中用构造器传参和用setget方法传参的区别

    创建一个学生类&#xff0c;设定一些私有属性 public class Student {private int age;private String name;private String sex;public int getAge() {return age;}public void setAge(int age) {this.age age;}public String getName() {return name;}public void setName(…...

    2024/4/6 11:57:28
  16. kafka topic分区和consumer组

    kafka主要有三种功能&#xff1a; 1.发布和订阅消息流 2.以容错的方式记录消息流&#xff0c;kafka以文件的方式来存储消息 3.可以再消息发布的时候进行处理 Producer:向Kafka集群发送消息&#xff0c;在发送消息之前&#xff0c;会对消息进行分类&#xff0c;即Topic. Topic:…...

    2024/4/20 5:15:24
  17. Semantic Models for the First-stage Retrieval(检索召回技术综述)

    Semantic Models for the First-stage Retrieval: A Comprehensive Review 今天整理一篇来自TOIS 21’的First-stage Retrieval 第一阶段检索综述的文章。第一阶段检索即是国内一般成为召回的阶段recall stage&#xff0c;也有人称为ranking stage或者search stage&#xff0c;…...

    2024/4/15 14:52:13
  18. C#桌面办公应用-工资管理系统系列五

    C#桌面办公应用-工资管理系统系列五接前文系列四,本文将讲解实现工资管理系统的代码的层次结构。主要采用的是MVCS模式的代码层次结构,视图层(V):是各种winform窗体;控制层(C):主要是winform窗体中各种控件的各个逻辑处理事件;而模型层(M)则是各个model实体以及数据库访问…...

    2024/4/19 4:43:07
  19. ssm面试题

    ssm面试题 一、MyBatis篇 1.Dao层接口的方法可以重载吗&#xff1f; 答&#xff1a;Mapper接口里的方法&#xff0c;是不能重载的&#xff0c;因为是使用全限名方法名的保存和寻找策略。Mapper接口的工作原理是JDK的动态代理&#xff0c;Mybatis 运行时会使用 JDK动态代理为…...

    2024/4/15 14:52:03
  20. 用记事本开发第一个Java程序

    【1】 学会用记事本开发第一个Java程序 【2】 了解和体会Java程序的运行机制 使用记事本编写一个Hello World程序&#xff0c;并在命令行窗口编译运行&#xff0c;并打印输出结果。 知识提示&#xff1a;  当java文件中的类名是用public修饰时&#xff0c;文件名必须与该pu…...

    2024/4/19 13:41:59

最新文章

  1. 【CSS】grid 布局一行自动填充,每行最大限定px

    <div class"model-plat-content"><div class"mode-card" v-for"i in 30"></div></div>.model-plat-content {display: grid;// 解释&#xff1a; repeat(auto-fit, minmax(250px, 1fr)) 自动填充&#xff0c;每行最大25…...

    2024/4/26 16:56:16
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. ChatGPT 初学者指南

    原文&#xff1a;ChatGPT for Beginners 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 介绍 如果您一直关注新闻和趋势&#xff0c;您可能已经在某个地方读到或听到过&#xff0c;Sam Altman 的生成式人工智能平台 ChatGPT 已经将人工智能推向了一个新的高度 - 许多…...

    2024/4/23 6:13:11
  4. 系列学习前端之第 7 章:一文掌握 AJAX

    1、AJAX 简介 AJAX 全称为 Asynchronous JavaScript And XML&#xff08;中文名&#xff1a;阿贾克斯&#xff09;&#xff0c;就是异步的 JS 和 XML。AJAX 不是新的编程语言&#xff0c;而是一种将现有的标准组合在一起使用的新方式。AJAX 可以在浏览器中向服务器发送异步请求…...

    2024/4/22 9:23:46
  5. 【外汇早评】美通胀数据走低,美元调整

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

    2024/4/25 11:51:20
  6. 【原油贵金属周评】原油多头拥挤,价格调整

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

    2024/4/25 18:39:24
  7. 【外汇周评】靓丽非农不及疲软通胀影响

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

    2024/4/25 18:38:39
  8. 【原油贵金属早评】库存继续增加,油价收跌

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

    2024/4/25 18:39:23
  9. 【外汇早评】日本央行会议纪要不改日元强势

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

    2024/4/25 18:39:22
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

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

    2024/4/25 18:39:22
  11. 【外汇早评】美欲与伊朗重谈协议

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

    2024/4/25 18:39:20
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

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

    2024/4/25 16:48:44
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

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

    2024/4/26 16:00:35
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

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

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

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

    2024/4/25 18:39:16
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

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

    2024/4/25 0:00:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

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

    2024/4/25 4:19:21
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

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

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

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

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

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

    2024/4/25 2:10:52
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

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

    2024/4/25 18:39:00
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

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

    2024/4/25 13:19:01
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

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

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

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

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

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

    2022/11/19 21:17:18
  26. 错误使用 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
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

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

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

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

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

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

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

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

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

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

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

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

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,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
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2022/11/19 21:16:58
  44. 如何在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