当前位置: 首页 > news >正文

怎样用电脑做网站手机端 网站 模板

怎样用电脑做网站,手机端 网站 模板,h5页面有哪些,建站网站插件目录 1 数据集构建 1.1 数据集的构建函数 1.2 加载数据并进行数据划分 1.3 构造Dataset类 2 模型构建 2.1 嵌入层 2.2 SRN层 2.3 线性层 2.4 模型汇总 3 模型训练 3.1 训练指定长度的数字预测模型 3.2 多组训练 3.3 损失曲线展示 4 模型评价 总结 参考文献 循环神经网络Recurrent Neural NetworkRNN是一类具有短期记忆能力的神经网络在循环神经网络中神经元不但可以接受其他神经元的信息也可以接受自身的信息形成具有环路的网络结构和前馈神经网络相比循环神经网络更加符合生物神经网络的结构目前循环神经网络已经被广泛应用在语音识别、语言模型以及自然语言生成等任务上 循环神经网络的记忆能力实验 循环神经网络的一种简单实现是简单循环网络Simple Recurrent NetworkSRN 令向量表示在时刻$t$时网络的输入 表示隐藏层状态即隐藏层神经元活性值则不仅和当前时刻的输入相关也和上一个时刻的隐藏层状态相关. 简单循环网络在时刻的更新公式为: 其中为隐状态向量为状态-状态权重矩阵为状态-输入权重矩阵为偏置向量。 如图展示了一个按时间展开的循环神经网络 简单循环网络在参数学习时存在长程依赖问题很难建模长时间间隔Long Range的状态之间的依赖关系。为了测试简单循环网络的记忆能力本节构建一个数字求和任务进行实验。 数字求和任务的输入是一串数字前两个位置的数字为0-9其余数字随机生成主要为0预测目标是输入序列中前两个数字的加和。 如果序列长度越长准确率越高则说明网络的记忆能力越好因此我们可以构建不同长度的数据集通过验证简单循环网络在不同长度的数据集上的表现从而测试简单循环网络的长程依赖能力.  1 数据集构建 我们首先构建不同长度的数字预测数据集DigitSum. 1.1 数据集的构建函数 由于在本任务中输入序列的前两位数字为 0 − 9其组合数是固定的所以可以穷举所有的前两位数字组合并在后面默认用0填充到固定长度. 但考虑到数据的多样性这里对生成的数字序列中的零位置进行随机采样并将其随机替换成0-9的数字以增加样本的数量 我们可以通过设置的数值来指定一条样本随机生成的数字序列数量.当生成某个指定长度的数据集时会同时生成训练集、验证集和测试集。当3时生成训练集。当1时生成验证集和测试集. 代码实现如下 import random import numpy as np# 固定随机种子 random.seed(0) np.random.seed(0)def generate_data(length, k, save_path):if length 3:raise ValueError(The length of data should be greater than 2.)if k 0:raise ValueError(k should be greater than 0.)# 生成100条长度为length的数字序列除前两个字符外序列其余数字暂用0填充base_examples []for n1 in range(0, 10):for n2 in range(0, 10):seq [n1, n2] [0] * (length - 2)label n1 n2base_examples.append((seq, label))examples []# 数据增强对base_examples中的每条数据默认生成k条数据放入examplesfor base_example in base_examples:for _ in range(k):# 随机生成替换的元素位置和元素idx np.random.randint(2, length)val np.random.randint(0, 10)# 对序列中的对应零元素进行替换seq base_example[0].copy()label base_example[1]seq[idx] valexamples.append((seq, label))# 保存增强后的数据with open(save_path, w, encodingutf-8) as f:for example in examples:# 将数据转为字符串类型方便保存seq [str(e) for e in example[0]]label str(example[1])line .join(seq) \t label \nf.write(line)print(fgenerate data to: {save_path}.)# 定义生成的数字序列长度 lengths [5, 10, 15, 20, 25, 30, 35] for length in lengths:# 生成长度为length的训练数据save_path f./datasets/{length}/train.txtk 3generate_data(length, k, save_path)# 生成长度为length的验证数据save_path f./datasets/{length}/dev.txtk 1generate_data(length, k, save_path)# 生成长度为length的测试数据save_path f./datasets/{length}/test.txtk 1generate_data(length, k, save_path) 注意需要提前把文件夹建好了,如下图所示 结果如下: 1.2 加载数据并进行数据划分 为方便使用本实验提前生成了长度分别为5、10、 15、20、25、30和35的7份数据存放于“./datasets”目录下读者可以直接加载使用。代码实现如下 import os# 加载数据 def load_data(data_path):# 加载训练集train_examples []train_path os.path.join(data_path, train.txt)with open(train_path, r, encodingutf-8) as f:for line in f.readlines():# 解析一行数据将其处理为数字序列seq和标签labelitems line.strip().split(\t)seq [int(i) for i in items[0].split( )]label int(items[1])train_examples.append((seq, label))# 加载验证集dev_examples []dev_path os.path.join(data_path, dev.txt)with open(dev_path, r, encodingutf-8) as f:for line in f.readlines():# 解析一行数据将其处理为数字序列seq和标签labelitems line.strip().split(\t)seq [int(i) for i in items[0].split( )]label int(items[1])dev_examples.append((seq, label))# 加载测试集test_examples []test_path os.path.join(data_path, test.txt)with open(test_path, r, encodingutf-8) as f:for line in f.readlines():# 解析一行数据将其处理为数字序列seq和标签labelitems line.strip().split(\t)seq [int(i) for i in items[0].split( )]label int(items[1])test_examples.append((seq, label))return train_examples, dev_examples, test_examples# 设定加载的数据集的长度 length 5 # 该长度的数据集的存放目录 data_path f./datasets/{length} # 加载该数据集 train_examples, dev_examples, test_examples load_data(data_path) print(dev example:, dev_examples[:2]) print(训练集数量, len(train_examples)) print(验证集数量, len(dev_examples)) print(测试集数量, len(test_examples)) 输出结果如下:  1.3 构造Dataset类 为了方便使用梯度下降法进行优化我们构造了DigitSum数据集的Dataset类函数__getitem__负责根据索引读取数据并将数据转换为张量。代码实现如下 from torch.utils.data import Dataset import torchclass DigitSumDataset(Dataset):def __init__(self, data):self.data datadef __getitem__(self, idx):example self.data[idx]seq torch.tensor(example[0], dtypetorch.int64)label torch.tensor(example[1], dtypetorch.int64)return seq, labeldef __len__(self):return len(self.data) 2 模型构建 使用SRN模型进行数字加和任务的模型结构为如图 整个模型由以下几个部分组成   1 嵌入层将输入的数字序列进行向量化即将每个数字映射为向量   2 SRN 层接收向量序列更新循环单元将最后时刻的隐状态作为整个序列的表示   3 输出层一个线性层输出分类的结果.   2.1 嵌入层 本任务输入的样本是数字序列为了更好地表示数字需要将数字映射为一个嵌入Embedding向量。嵌入向量中的每个维度均能用来刻画该数字本身的某种特性。由于向量能够表达该数字更多的信息利用向量进行数字求和任务可以使得模型具有更强的拟合能力。 首先我们构建一个嵌入矩阵Embedding Matrix其中第行对应数字的嵌入向量每个嵌入向量的维度是。如图所示。给定一个组数字序列其中为批大小为序列长度可以通过查表将其映射为嵌入表示。 class Embedding(nn.Module):def __init__(self, num_embeddings, embedding_dim):super(Embedding, self).__init__()self.W nn.init.xavier_uniform_(torch.empty(num_embeddings, embedding_dim), gain1.0)def forward(self, inputs):# 根据索引获取对应词向量embs self.W[inputs]return embsemb_layer Embedding(10, 5) inputs torch.tensor([0, 1, 2, 3]) emb_layer(inputs) 2.2 SRN层 数字序列经过嵌入层映射后转换为其中为批大小为序列长度为嵌入维度。 在时刻SRN将当前的输入与隐状态进行线性变换和组合并通过一个非线性激活函数得到新的隐状态SRN的状态更新函数为: 其中是可学习参数表示隐状态向量的维度。 代码如下: import torch import torch.nn as nn import torch.nn.functional as Ftorch.manual_seed(0)# SRN模型 class SRN(nn.Module):def __init__(self, input_size, hidden_size, W_attrNone, U_attrNone, b_attrNone):super(SRN, self).__init__()# 嵌入向量的维度self.input_size input_size# 隐状态的维度self.hidden_size hidden_size# 定义模型参数W其shape为 input_size x hidden_sizeif W_attr None:W torch.zeros(size[input_size, hidden_size], dtypetorch.float32)else:W torch.tensor(W_attr, dtypetorch.float32)self.W torch.nn.Parameter(W)# 定义模型参数U其shape为hidden_size x hidden_sizeif U_attr None:U torch.zeros(size[hidden_size, hidden_size], dtypetorch.float32)else:U torch.tensor(U_attr, dtypetorch.float32)self.U torch.nn.Parameter(U)# 定义模型参数b其shape为 1 x hidden_sizeif b_attr None:b torch.zeros(size[1, hidden_size], dtypetorch.float32)else:b torch.tensor(b_attr, dtypetorch.float32)self.b torch.nn.Parameter(b)# 初始化向量def init_state(self, batch_size):hidden_state torch.zeros(size[batch_size, self.hidden_size], dtypetorch.float32)return hidden_state# 定义前向计算def forward(self, inputs, hidden_stateNone):# inputs: 输入数据, 其shape为batch_size x seq_len x input_sizebatch_size, seq_len, input_size inputs.shape# 初始化起始状态的隐向量, 其shape为 batch_size x hidden_sizeif hidden_state is None:hidden_state self.init_state(batch_size)# 循环执行RNN计算for step in range(seq_len):# 获取当前时刻的输入数据step_input, 其shape为 batch_size x input_sizestep_input inputs[:, step, :]# 获取当前时刻的隐状态向量hidden_state, 其shape为 batch_size x hidden_sizehidden_state F.tanh(torch.matmul(step_input, self.W) torch.matmul(hidden_state, self.U) self.b)return hidden_state 这里只保留了简单循环网络的最后一个时刻的输出向量。 ## 初始化参数并运行 U_attr [[0.0, 0.1], [0.1, 0.0]] b_attr [[0.1, 0.1]] W_attr [[0.1, 0.2], [0.1, 0.2]]srn SRN(2, 2, W_attrW_attr, U_attrU_attr, b_attrb_attr)inputs torch.tensor([[[1, 0], [0, 2]]], dtypetorch.float32) hidden_state srn(inputs) print(hidden_state, hidden_state)输出结果如下 PyTorch框架内置了SRN的API torch.nn.RNN # 这里创建一个随机数组作为测试数据数据shape为batch_size x seq_len x input_size batch_size, seq_len, input_size 8, 20, 32 inputs torch.randn([batch_size, seq_len, input_size])# 设置模型的hidden_size hidden_size 32 torch_srn nn.RNN(input_size, hidden_size) self_srn SRN(input_size, hidden_size)self_hidden_state self_srn(inputs) torch_outputs, torch_hidden_state torch_srn(inputs)print(self_srn hidden_state: , self_hidden_state.shape) print(torch_srn outpus:, torch_outputs.shape) print(torch_srn hidden_state:, torch_hidden_state.shape)输出结果如下 可以看到两者的输出基本是一致的。另外还可以进行对比两者在运算速度方面的差异。代码实现如下 import time# 计算自己实现的SRN运算速度 model_time 0 for i in range(100):strat_time time.time()out self_srn(inputs)if i 10:continueend_time time.time()model_time (end_time - strat_time) avg_model_time model_time / 90 print(self_srn speed:, avg_model_time, s)# 计算torch内置的SRN运算速度 model_time 0 for i in range(100):strat_time time.time()out torch_srn(inputs)# 预热10次运算不计入最终速度统计if i 10:continueend_time time.time()model_time (end_time - strat_time) avg_model_time model_time / 90 print(torch_srn speed:, avg_model_time, s) 输出结果如下 2.3 线性层 线性层会将最后一个时刻的隐状态向量进行线性变换输出分类的对数几率Logits为 其中为可学习的权重矩阵和偏置 提醒在分类问题的实践中我们通常只需要模型输出分类的对数几率Logits而不用输出每个类的概率。这需要损失函数可以直接接收对数几率来损失计算 线性层直接使用torch.nn.Linear算子 2.4 模型汇总 在定义了每一层的算子之后我们定义一个数字求和模型Model_RNN4SeqClass该模型会将嵌入层、SRN层和线性层进行组合以实现数字求和的功能. 具体来讲Model_RNN4SeqClass会接收一个SRN层实例用于处理数字序列数据同时在__init__函数中定义一个Embedding嵌入层其会将输入的数字作为索引输出对应的向量最后会使用torch.nn.Linear定义一个线性层。 提醒为了方便进行对比实验我们将SRN层的实例化放在\code{Model_RNN4SeqClass}类外面。通常情况下模型内部算子的实例化是放在模型里面。 在forward函数中调用上文实现的嵌入层、SRN层和线性层处理数字序列同时返回最后一个位置的隐状态向量。代码实现如下 # 基于RNN实现数字预测的模型 class Model_RNN4SeqClass(nn.Module):def __init__(self, model, num_digits, input_size, hidden_size, num_classes):super(Model_RNN4SeqClass, self).__init__()# 传入实例化的RNN层例如SRNself.rnn_model model# 词典大小self.num_digits num_digits# 嵌入向量的维度self.input_size input_size# 定义Embedding层self.embedding Embedding(num_digits, input_size)# 定义线性层self.linear nn.Linear(hidden_size, num_classes)def forward(self, inputs):# 将数字序列映射为相应向量inputs_emb self.embedding(inputs)# 调用RNN模型hidden_state self.rnn_model(inputs_emb)# 使用最后一个时刻的状态进行数字预测logits self.linear(hidden_state)return logits# 实例化一个input_size为4 hidden_size为5的SRN srn SRN(4, 5) # 基于srn实例化一个数字预测模型实例 model Model_RNN4SeqClass(srn, 10, 4, 5, 19) # 生成一个shape为 2 x 3 的批次数据 inputs torch.tensor([[1, 2, 3], [2, 3, 4]]) # 进行模型前向预测 logits model(inputs) print(logits)输出结果如下 3 模型训练 3.1 训练指定长度的数字预测模型 基于RunnerV3类进行训练只需要指定length便可以加载相应的数据。设置超参数使用Adam优化器学习率为 0.001实例化模型使用第4.5.4节定义的Accuracy计算准确率。使用Runner进行训练训练回合数设为500。代码实现如下 首先在对应路径下创建两个文件夹命名为checkpoints、images如下图所示 import os import random import torch import numpy as np from nndl import Accuracy from nndl import RunnerV3 from torch.utils.data import DataLoader# 训练轮次 num_epochs 500 # 学习率 lr 0.001 # 输入数字的类别数 num_digits 10 # 将数字映射为向量的维度 input_size 32 # 隐状态向量的维度 hidden_size 32 # 预测数字的类别数 num_classes 19 # 批大小 batch_size 8 # 模型保存目录 save_dir ./checkpoints# 通过指定length进行不同长度数据的实验 def train(length):print(f\n Training SRN with data of length {length}.)# 加载长度为length的数据data_path f./datasets/{length}train_examples, dev_examples, test_examples load_data(data_path)train_set, dev_set, test_set DigitSumDataset(train_examples), DigitSumDataset(dev_examples), DigitSumDataset(test_examples)train_loader DataLoader(train_set, batch_sizebatch_size)dev_loader DataLoader(dev_set, batch_sizebatch_size)test_loader DataLoader(test_set, batch_sizebatch_size)# 实例化模型base_model SRN(input_size, hidden_size)model Model_RNN4SeqClass(base_model, num_digits, input_size, hidden_size, num_classes)# 指定优化器optimizer torch.optim.Adam(lrlr, paramsmodel.parameters())# 定义评价指标metric Accuracy()# 定义损失函数loss_fn nn.CrossEntropyLoss()# 基于以上组件实例化Runnerrunner RunnerV3(model, optimizer, loss_fn, metric)# 进行模型训练model_save_path os.path.join(save_dir, fbest_srn_model_{length}.pdparams)runner.train(train_loader, dev_loader, num_epochsnum_epochs, eval_steps100, log_steps100, save_pathmodel_save_path)return runner nndl.py import torchclass RunnerV3(object):def __init__(self, model, optimizer, loss_fn, metric, **kwargs):self.model modelself.optimizer optimizerself.loss_fn loss_fnself.metric metric # 只用于计算评价指标# 记录训练过程中的评价指标变化情况self.dev_scores []# 记录训练过程中的损失函数变化情况self.train_epoch_losses [] # 一个epoch记录一次lossself.train_step_losses [] # 一个step记录一次lossself.dev_losses []# 记录全局最优指标self.best_score 0def train(self, train_loader, dev_loaderNone, **kwargs):# 将模型切换为训练模式self.model.train()# 传入训练轮数如果没有传入值则默认为0num_epochs kwargs.get(num_epochs, 0)# 传入log打印频率如果没有传入值则默认为100log_steps kwargs.get(log_steps, 100)# 评价频率eval_steps kwargs.get(eval_steps, 0)# 传入模型保存路径如果没有传入值则默认为best_model.pdparamssave_path kwargs.get(save_path, best_model.pdparams)custom_print_log kwargs.get(custom_print_log, None)# 训练总的步数num_training_steps num_epochs * len(train_loader)if eval_steps:if self.metric is None:raise RuntimeError(Error: Metric can not be None!)if dev_loader is None:raise RuntimeError(Error: dev_loader can not be None!)# 运行的step数目global_step 0# 进行num_epochs轮训练for epoch in range(num_epochs):# 用于统计训练集的损失total_loss 0for step, data in enumerate(train_loader):X, y data# 获取模型预测logits self.model(X)loss self.loss_fn(logits, y.long()) # 默认求meantotal_loss loss# 训练过程中每个step的loss进行保存self.train_step_losses.append((global_step, loss.item()))if log_steps and global_step % log_steps 0:print(f[Train] epoch: {epoch}/{num_epochs}, step: {global_step}/{num_training_steps}, loss: {loss.item():.5f})# 梯度反向传播计算每个参数的梯度值loss.backward()if custom_print_log:custom_print_log(self)# 小批量梯度下降进行参数更新self.optimizer.step()# 梯度归零self.optimizer.zero_grad()# 判断是否需要评价if eval_steps 0 and global_step 0 and \(global_step % eval_steps 0 or global_step (num_training_steps - 1)):dev_score, dev_loss self.evaluate(dev_loader, global_stepglobal_step)print(f[Evaluate] dev score: {dev_score:.5f}, dev loss: {dev_loss:.5f})# 将模型切换为训练模式self.model.train()# 如果当前指标为最优指标保存该模型if dev_score self.best_score:self.save_model(save_path)print(f[Evaluate] best accuracy performence has been updated: {self.best_score:.5f} -- {dev_score:.5f})self.best_score dev_scoreglobal_step 1# 当前epoch 训练loss累计值trn_loss (total_loss / len(train_loader)).item()# epoch粒度的训练loss保存self.train_epoch_losses.append(trn_loss)print([Train] Training done!)# 模型评估阶段使用torch.no_grad()控制不计算和存储梯度torch.no_grad()def evaluate(self, dev_loader, **kwargs):assert self.metric is not None# 将模型设置为评估模式self.model.eval()global_step kwargs.get(global_step, -1)# 用于统计训练集的损失total_loss 0# 重置评价self.metric.reset()# 遍历验证集每个批次for batch_id, data in enumerate(dev_loader):X, y data# 计算模型输出logits self.model(X)# 计算损失函数loss self.loss_fn(logits, y.long()).item()# 累积损失total_loss loss# 累积评价self.metric.update(logits, y)dev_loss (total_loss / len(dev_loader))dev_score self.metric.accumulate()# 记录验证集lossif global_step ! -1:self.dev_losses.append((global_step, dev_loss))self.dev_scores.append(dev_score)return dev_score, dev_loss# 模型评估阶段使用torch.no_grad()控制不计算和存储梯度torch.no_grad()def predict(self, x, **kwargs):# 将模型设置为评估模式self.model.eval()# 运行模型前向计算得到预测值logits self.model(x)return logitsdef save_model(self, save_path):torch.save(self.model.state_dict(), save_path)def load_model(self, model_path):state_dict torch.load(model_path)self.model.load_state_dict(state_dict)class Accuracy():def __init__(self, is_logistTrue):# 用于统计正确的样本个数self.num_correct 0# 用于统计样本的总数self.num_count 0self.is_logist is_logistdef update(self, outputs, labels):# 判断是二分类任务还是多分类任务shape[1]1时为二分类任务shape[1]1时为多分类任务if outputs.shape[1] 1: # 二分类outputs torch.squeeze(outputs, dim-1)if self.is_logist:# logist判断是否大于0preds torch.tensor((outputs 0), dtypetorch.float32)else:# 如果不是logist判断每个概率值是否大于0.5当大于0.5时类别为1否则类别为0preds torch.tensor((outputs 0.5), dtypetorch.float32)else:# 多分类时使用torch.argmax计算最大元素索引作为类别preds torch.argmax(outputs, dim1)# 获取本批数据中预测正确的样本个数labels torch.squeeze(labels, dim-1)batch_correct torch.sum(torch.tensor(preds labels, dtypetorch.float32)).cpu().numpy()batch_count len(labels)# 更新num_correct 和 num_countself.num_correct batch_correctself.num_count batch_countdef accumulate(self):# 使用累计的数据计算总的指标if self.num_count 0:return 0return self.num_correct / self.num_countdef reset(self):# 重置正确的数目和总数self.num_correct 0self.num_count 0def name(self):return Accuracy3.2 多组训练 srn_runners {}lengths [10, 15, 20, 25, 30, 35] for length in lengths:runner train(length)srn_runners[length] runner训练结果如下 3.3 损失曲线展示 画出各个长度的数字预测模型训练过程中在训练集和验证集上的损失曲线实现代码实现如下 import matplotlib.pyplot as plt def plot_training_loss(runner, fig_name, sample_step):plt.figure()train_items runner.train_step_losses[::sample_step]train_steps [x[0] for x in train_items]train_losses [x[1] for x in train_items]plt.plot(train_steps, train_losses, color#e4007f, labelTrain loss)dev_steps [x[0] for x in runner.dev_losses]dev_losses [x[1] for x in runner.dev_losses]plt.plot(dev_steps, dev_losses, color#f19ec2, linestyle--, labelDev loss)# 绘制坐标轴和图例plt.ylabel(loss, fontsizelarge)plt.xlabel(step, fontsizelarge)plt.legend(locupper right, fontsizex-large)plt.savefig(fig_name)plt.show()# 画出训练过程中的损失图 for length in lengths:runner srn_runners[length]fig_name f./images/6.6_{length}.pdfplot_training_loss(runner, fig_name, sample_step100)当L 10、15、20、25、30、35时的图像如下: 4 模型评价 在模型评价时加载不同长度的效果最好的模型然后使用测试集对该模型进行评价观察模型在测试集上预测的准确度. 同时记录一下不同长度模型在训练过程中在验证集上最好的效果。代码实现如下。 srn_dev_scores [] srn_test_scores [] for length in lengths:print(fEvaluate SRN with data length {length}.)runner srn_runners[length]# 加载训练过程中效果最好的模型model_path os.path.join(save_dir, fbest_srn_model_{length}.pdparams)runner.load_model(model_path)# 加载长度为length的数据data_path f./datasets/{length}train_examples, dev_examples, test_examples load_data(data_path)test_set DigitSumDataset(test_examples)test_loader DataLoader(test_set, batch_sizebatch_size)# 使用测试集评价模型获取测试集上的预测准确率score, _ runner.evaluate(test_loader)srn_test_scores.append(score)srn_dev_scores.append(max(runner.dev_scores))for length, dev_score, test_score in zip(lengths, srn_dev_scores, srn_test_scores):print(f[SRN] length:{length}, dev_score: {dev_score}, test_score: {test_score: .5f}) 输出结果如下 接下来将SRN在不同长度的验证集和测试集数据上的表现绘制成图片进行观察。  import matplotlib.pyplot as pltplt.plot(lengths, srn_dev_scores, -o, color#e4007f, labelDev Accuracy) plt.plot(lengths, srn_test_scores,-o, color#f19ec2, labelTest Accuracy)#绘制坐标轴和图例 plt.ylabel(accuracy, fontsizelarge) plt.xlabel(sequence length, fontsizelarge) plt.legend(locupper right, fontsizex-large)fig_name ./images/6.7.pdf plt.savefig(fig_name) plt.show()输出结果如下: 展示了SRN模型在不同长度数据训练出来的最好模型在验证集和测试集上的表现。可以看到随着序列长度的增加验证集和测试集的准确度整体趋势是降低的这同样说明SRN模型保持长期依赖的能力在不断降低.  总结 本次实验代码的总量较大但是paddle转torch却只需要很少的一部分代码但是最开始训练的时候没注意到需要创建两个文件夹多跑了两次之后为了观看数据也还多跑了三次但是我发现这组数据的波动很大大部分正确率也不高应该是后来的为了梯度爆炸打的实验做铺垫。 参考文献 [1].邱锡鹏.《神经网络与深度学习》[J].中文信息学报,2020,34(07):4.
http://www.pierceye.com/news/503936/

相关文章:

  • 微做网站环保行业网站建设
  • 昭通做网站公司北京手机网站制作多少钱
  • 昆明企业建网站多少钱如何弄微信小程序
  • wordpress清理网站缓存做的比较简约的网站
  • 青岛高端网站制作中铁建设集团门户密码
  • 公司专业做网站做网站域名起什么作用
  • 推广型网站建设机构如何创建wordpress
  • 做网站交互demo工具在线设计自己的签名免费
  • 做百度推广会送网站吗网站建设和邮箱的关联
  • 假网站如何做济南天桥区网站建设
  • 顺企网我做网站余姚网站建设在哪里
  • 做网站logo用啥软件做电子书网站
  • 企业网站推广的策略有哪些php怎么建立站点
  • 找网站设计公司 看那些wordpress居中
  • 无锡网站营销公司哪家好全屏网页设计尺寸
  • 做第一个网站什么类型网站搜索引擎优化案例
  • 网站代码生成网站网站开发专业 工作意愿
  • ps做网站效果图尺寸如何重庆网站建设选夹夹虫
  • 上鼎工程建设有限公司网站最简单的手机网站制作
  • 网站维护企业网站的后缀名
  • 建设网站需要哪些认证做公众号的网站模板下载吗
  • 搜狗提交网站入口Wordpress登录后顶部的黑
  • 计算机网络技术就业方向及前景西安seo网站排名优化公司
  • 手机网站要求软文推广图片
  • 网站在哪里建立用h5开发的网站模板
  • 深圳建英文网站小学生作文网
  • 画室网站模板德阳 网站建设
  • 池州网站建设网站建设网站开发技术与应用课程设计
  • 淘宝上做网站可信吗怎么建设游戏试玩平台网站
  • 个人网站有哪些类型公众号开发教程零基础