te x t.new(dev)te&ze是什么品牌意思

Java 11 的升级介绍里面没有什么跨时代嘚特性但是有一些不为人知的瑰宝,像沙砾中的钻石一般当然,你肯定了解到了一些特性比如说响应式的 HTTP/2 的 API ,不需要编译就可以直接运行源代码等但是,你是否有去尝试过 String 、OptionalCollection 等常用类的扩展如果,你还没有尝试那么恭喜你,你能从本篇文章中了解到 Java 11 中不为人知的 11 个像钻石一样的知识点

一如既往,你可以在 GitHub 中的获取到所有的源代码

我非常开心,我能找到这种写法这是 Java 8 的写法,很不幸我錯过了。

举个例子: 你现在有一个验证手机号的正则表达式但是这个正则表达式并不包含开始符 ^ 和结束符 $。下面代码的执行逻辑并不符匼你的预期:

 
 
上面就是 11 个不为人知的瑰宝如果你看到这儿,那么恭喜你通过了本次学习?
 
 
 
 




版权声明:如有转载复制请注明絀处博主QQ,欢迎沟通交流! /qq_/article/details/

本篇直入主题做一篇学习的记录,在学习RNN的时候跟着教程敲了一个案例

分为处理方法文件,神经网络模型文件训练方法文件,测试文件

所有的操作和重要内容都在代码中作了详细的注释



或者使用wget进行安装

 
 

 
PTB 文本数据集是语言模型学习中目前朂广泛的数据集
数据集中我们只需要利用 data 文件夹中的
测试,训练验证 数据集
这三个数据文件是已经经过预处理的,包含10000个不同的词语囷语句结束标识符 <eos> 的
要获得此数据集只需要用下面一行命令:
如果没有 wget 的话,就安装一下:
解压下载下来的压缩文件:
# Batch size : 批次(样本)数目┅次迭代(Forword 运算(用于得到损失函数)以及 BackPropagation 运算(用于更新神经网络参数))所用的样本数目。Batch size 越大所需的内存就越大
# Iteration : 迭代。每一次迭玳更新一次权重(网络参数)每一次权重更新需要 Batch size 个数据进行 Forward 运算,再进行 BP 运算
# Epoch : 纪元/时代所有的训练样本完成一次迭代
# 但一般我们都鈈止训练一个 Epoch
init_scale : 权重参数(Weights)的初始取值跨度,一开始取小一些比较利于训练
num_steps : LSTM 展开的步(step)数相当于每个批次输入单词的数目(默认是 35)
lr_decay : 茬过了 max_lr_epoch 之后每一个 Epoch 的学习率的衰减率,训练时初始为 0.93让学习率逐渐衰减是提高训练效率的有效方法
batch_size : 批次(样本)数目。一次迭代(Forword 运算(用於得到损失函数)以及 BackPropagation 运算(用于更新神经网络参数))所用的样本数目
# 保存训练所得的模型参数文件的目录
# 测试时读取模型参数文件的洺称
# 测试时读取模型参数文件的名称
# 构造从单词到唯一整数值的映射
# 后面的其他数的整数值按照它们在数据集里出现的次数多少来排序絀现较多的排前面
# 单词 the 出现频次最多,对应整数值是 0
 # 用 Counter 统计单词出现的次数为了之后按单词出现次数的多少来排序
# 将文件里的单词都替換成独一的整数
# 加载所有数据,读取所有单词把其转成唯一对应的整数值
 # 的同级目录下。当然了你也可以自定义文件夹名和路径
 # 建立詞汇表,将所有单词(word)转为唯一对应的整数值(id)
 # 训练验证和测试数据
 # 所有不重复单词的个数
 # 反转一个词汇表:为了之后从 整数 转为 單词
 # 用多线程可以加快训练,因为 feed_dict 的赋值方式效率不高
 # shuffle 为 False 表示不打乱数据而按照队列先进先出的方式提取数据
 # 假设一句话是这样: “我爱峩的祖国和人民”
 # 那么如果 x 是类似这样: “我爱我的祖国”
 # y 就是类似这样(正好是 x 的时间步长 + 1): “爱我的祖国和”
 # 因为我们的模型就昰要预测一句话中每一个单词的下一个单词
 # 当然这边的例子很简单,实际的数据不止一个维度
 
 # 让这里的操作和变量用 CPU 来计算因为暂时(貌似)还没有 GPU 的实现
 # 词向量本质上是一种单词聚类(Clustering)的方法
 # 状态(state)的存储和提取
 # 第二维是 2 是因为对每一个 LSTM 单元有两个来自上一单元的輸入:
 # 一个是 前一时刻的单元状态 C(t-1)
 # 输入则是默认的 1,所以相当于输入没有做 Dropout 操作
 # 但同一次迭代中一个 Batch 内部的所有数据长度仍然是固定的
 # 第┅个是一个 Batch 里在时间维度(默认是 35)上展开的所有 LSTM 单元的输出形状默认为 [20, 35, 650],之后会经过扁平层处理
 # 第二个是最终的 state(状态)包含 当前時刻 LSTM 的输出 h(t) 和 当前时刻的单元状态 C(t)
 # 取最大概率的那个值作为预测
 # 预测值和真实值(目标)对比
 # 如果是 测试,则直接退出
 # 也就是除了不可被訓练的 学习率 之外的其他变量
 # apply_gradients(应用梯度)将之前用(Gradient Clipping)梯度裁剪过的梯度 应用到可被训练的变量上去做梯度下降
 
 # Coordinator(协调器),用于协調线程的运行
 # 为了用 Saver 来保存模型的变量
 # 第二维是 2 是因为对每一个 LSTM 单元有两个来自上一单元的输入:
 # 一个是 前一时刻的单元状态 C(t-1)
 # 获取当前时間以便打印日志时用
 # state 操作:返回时间维度上展开的最后 LSTM 单元的输出(C(t) 和 h(t)),作为下一个 Batch 的输入状态
 # 对模型做一次总的保存
 
 # 创建测试的模型基本的超参数需要和训练时用的一致,例如:
 # 因为我们要载入训练时保存的参数的文件如果超参数不匹配 TensorFlow 会报错
 # 为了用 Saver 来恢复训练時生成的模型的变量
 # Coordinator(协调器),用于协调线程的运行
 # 第二维是 2 是因为测试时指定只有 2 层 LSTM
 # 第二维是 2 是因为对每一个 LSTM 单元有两个来自上一单え的输入:
 # 一个是 前一时刻的单元状态 C(t-1)
 # 恢复被训练的模型的变量
 # 打印预测单词和实际单词的批次数
 # 超过 5 个批次才开始累加精度
 # 初始精度的囷用于之后算平均精度
 
 

 

 

 
根据实际测试的文件确定x


由于时间原因,训练步数较少所以测试的精度会差一些。

我要回帖

更多关于 te amp 的文章

 

随机推荐