TF2.1学习笔记

TensorFlow2.1入门学习笔记(16)——实战使用RNN,LSTM,GRU实现股票预测

Embedding 独热码:数量大,过于稀疏,映射之间是独立的,没有表现出关联性 Embedding:一种单词编码方法,以低维向量实现了编码,这种编码通过神经网络训练优化,能表达出单词的相关性。 TF描述Embedding层 tf.keras.layers.Embedding(词汇表大小,编码维度) # 编码维度就是用几个数字表达一个单词 # 对1-100进行编码, [4] 编码为 [0.25, 0.1, 0.11] tf.keras.layers.Embedding(100, 3 ) 入Embedding时, x_train维度:[送入样本数, 循环核时间展开步数] RNN使用Embedding 编码,预测字母 import numpy as np import tensorflow as tf from tensorflow.

TensorFlow2.1入门学习笔记(15)——循环神经网络,顺序字母预测

卷积就是特征提取器,通过卷积计算层提取空间信息,例如我们可以用卷积和提取一张图片的空间特征,再把提取到的空间特征送入全连接网络,实现离散数据的分类。但是一些与时间相关的,只可以根据上文预测书下文来预测。 例如: 看到这几个字会下意识地想到“水”,这是因为脑具有记忆。记忆体记住了上文中提到的“鱼离不开”这几个字。下意识的预测出了可能性最大的“水”字,这种预测就是通过提取历史数据的特征,预测出接下来最可能发生的情况。 循环核 通过不同时刻的参数共享,实现了对时间序列的信息提取。 具体模型: $$y_t = softmax(h_t w_{hy} + b_y)$$ $$h_t = tanh(x_t w_{xh} + h_{t-1}w_{hh})$$ 输入特征:$x$ 当前记忆体输出特征:$y_t$ 当前记忆体存储状态信息:$h_t$ 上一时刻记忆体存储状态信息:$h_{t-1}$ 参数矩阵:$w_{xh}, w_{hh}, w_{hy}$ 偏置项:$b_h$ 前向传播时:记忆体内存储的状态信息$h_t$ ,在每个时刻都被刷新,三个参数矩阵$w_{xh} , w_{hh}, w_{hy}$自始至终都是固定不变的。 反向传播时:三个参数矩阵$w_{xh} , w_{hh}, w_{hy}$被梯度下降法更新。 循环核按照时间步展开 循环核按时间轴方向展开

TensorFlow2.1入门学习笔记(14)——卷积神经网络InceptionNet, ResNet示例

InceptionNet InceptionNet诞生于2014年,当年ImageNet竞赛冠军,Top5错误率为6.67% InceptionNet引入了Inception结构块,在同一层网络内使用不同尺寸的卷积核,提升了模型感知力使用了批标准化缓解了梯度消失 Inception V1(GoogleNet)——构建了1x1、3x3、5x5的 conv 和3x3的 pooling 的分支网络module,同时使用MLPConv和全局平均池化,扩宽卷积层网络宽度,增加了网络对尺度的适应性; Inception V2——提出了Batch Normalization,代替Dropout和LRN,其正则化的效果让大型卷积网络的训练速度加快很多倍,同时收敛后的分类准确率也可以得到大幅提高,同时借鉴VGGNet使用两个3x3的卷积核代替5x5的卷积核,在降低参数量同时提高网络学习能力; Inception V3——引入了 Factorization,将一个较大的二维卷积拆成两个较小的一维卷积,比如将3x3卷积拆成1x3卷积和3x1卷积,一方面节约了大量参数,加速运算并减轻了过拟合,同时增加了一层非线性扩展模型表达能力,除了在 Inception Module 中使用分支,还在分支中使用了分支(Network In Network In Network); Inception V4——研究了 Inception Module 结合 Residual Connection,结合 ResNet 可以极大地加速训练,同时极大提升性能,在构建 Inception-ResNet 网络同时,还设计了一个更深更优化的 Inception v4 模型,能达到相媲美的性能。 网络结构

TensorFlow2.1入门学习笔记(13)——卷积神经网络LeNet, AlexNet, VGGNet示例

Cifar10数据集 提供 5万张 32*32 像素点的十分类彩色图片和标签,用于训练。 提供 1万张 32*32 像素点的十分类彩色图片和标签,用于测试。 导入cifar10数据集: cifar10 = tf.keras.datasets.cifar10 (x_train, y_train),(x_test, y_test) = cifar10.load_data() 可视化训练集输入特征的第一个元素 plt.imshow(x_train[0]) #绘制图片 plt.show() 打印出训练集输入特征的第一个元素 print("x_train[0]:\n", x_train[0]) 打印出训练集标签的第一个元素 print("y_train[0]:\n", y_train[0]) 打印出整个训练集输入特征形状 print("x_train.

TensorFlow2.1入门学习笔记(12)——卷积神经网络

每个神经元与前后相邻层的每一个神经元都有连接关系,输入是特征,输出为预测的结果。随着隐藏层增多,网络规模的增大,待优化参数过多容易导致模型过拟合 卷积计算过程: 全连接NN:每个神经元与前后相邻层的每一个神经元都有连接关系,输入是特征,输出为预测的结果。 实际项目中的图片多是高分辨率彩色图 随着隐藏层增多,网络规模的增大,待优化参数过多容易导致模型过拟合 实际应用时会先对原始图像进行特征提取再把提取到的特征送给全连接网络 卷积(Convolutional) 卷积计算可是一种有效提取图像特征的方法 一般会用一个正方形的卷积核,按指定步长,在输入特征图上滑动,遍历输入特征图中的每个像素点。每一个步长,卷积核会与输入特征图出现重合区域,重合区域对应元素相乘、求和再加上偏置项得到输出特征的一个像素点 输入特征图的深度(channel数),决定了当前层卷积核的深度;当前层卷积核的个数,决定了当前层输出特征图的深度。 卷积核 卷积核的计算过程 感受野(Receptive Field) 卷积神经网络各输出特征图中的每个像素点,在原始输入图片上映射区域的大小。 例如:5x5x1的输入特征,经过2次3x3x1的卷积过程感受野是5;经过1次5x5x1的卷积过程感受野也是5,感受野相同,则特征提取能力相同。 感受野的选择

TensorFlow2.1入门学习笔记(11)——自制数据集,并记录训练模型

以MNIST的sequential模型为base-line,通过读取自己的数据,训练模型并存储模型,最后达到绘图实物的运用。 自制数据集,解决本领域应用 观察数据结构 给x_train、y_train、x_test、y_test赋值 def generateds(图片路径,标签文件): def generateds(path, txt): f = open(txt, 'r') # 以只读形式打开txt文件 contents = f.readlines() # 读取文件中所有行 f.close() # 关闭txt文件 x, y_ = [], [] # 建立空列表 for content in contents: # 逐行取出 value = content.

TensorFlow2.1入门学习笔记(10)——使用keras搭建神经网络(Mnist,Fashion)

前面已经使用TensorFlow2的原生代码搭建神经网络,接下来将使用keras搭建神经网络,并改写鸢尾花分类问题的代码,将原本100多行的代码用不到20行代码实现。 用TensorFlow API:tf.keras搭建网络 使用Sequential 六步法: import,相关模块 train, test,指定训练集的输入特征,和训练集的标签 model = tf.keras.models.Sequential,搭建网络结构,(顺序神经网络) model.compile,配置训练方法 model.fit,执行训练 model.summary,打印出网络结构和参数统计 model = tf.keras.models.Sequential([网络结构]) 描述各层网络: 拉直层:tf.keras.layers.Flatten(),将输入特征拉直 全连接层:tf.keras.layers.Dense(神经元个数,activation=“激活函数”,kernel_regularizer=哪种正则化) activation(字符串给出)可选: relu、 softmax、 sigmoid 、 tanh

TensorFlow2.1入门学习笔记(9)——神经网络参数优化器(优化器性能比较)

神经网络是基于链接的人工智能,当网络结构固定后,不同参数的选取对模型的表达力影响很大,优化器就是引导更新模型参数的工具 常用符号 待优化参数w 损失函数loss 学习率lr 每次迭代一个batch(以batch为单位批量喂入神经网络,batch常为$2^n$) t表示当前batch迭代的总次数 更新参数的过程 计算t时刻损失函数关于当前参数的梯度$g_t=\nabla loss=\frac{\partial loss}{\partial(w_t)}$ 计算t时刻一阶动量$m_t$和二阶动量$V_t$ 计算t时刻下降梯度:$\eta_t=lr*{\frac {m_t}{\sqrt V_t}}$ 计算t+1时刻参数:$w_{t+1}=w_t-\eta_t=w_t-lr*{\frac {m_t}{\sqrt V_t}}$ 一阶动量:与梯度相关的函数 二阶动量:与梯度平方相关的函数 不同的优化器实质上是定义了不同的一阶动量和二阶动量公式 五种常见优化器 使用鸢尾花分类问题代码检测五种优化器性能。 SGD(无moment):随机梯度下降 $m_t=g_t$ $V_t=1$

TensorFlow2.1入门学习笔记(8)——欠拟合与过拟合(正则化)

欠拟合与过拟合 欠拟合:模型不能有效拟合数据集对现有数据集学习的不够彻底 过拟合:模型对训练集拟合的太好,而缺失了泛化力 欠拟合的解决方法: 增加输入特征项 增加网络参数 减少正则化参数 过拟合的解决方法: 数据清洗 增大训练集 采用正则化 增大正则化参数 正则化缓解过拟合 正则化在损失函数中引入模型复杂度指标,利用给W加权值,弱化了训练 数据的噪声(一般不正则化b) 常见的正则化: $loss_{l_1}(w)=\sum_i |w_i|$ $loss_{l_1}(w)=\sum_i |w_i ^2|$ 正则化的选择: L1正则化大概率会使很多参数变为零,因此该方法可通过稀疏参数,即减少参数的数量,降低复杂度。 L2正则化会使参数很接近零但不为零,因此该方法可通过减小参数值的大小降低复杂度。 例如:给出一个dot.csv数据集,判断y_是1的可能性大还是0的可能性大。 思路:可以将x1、x2分别作为横纵坐标,y_为1的点标为红色,为0的点标为蓝色,在坐标系中展示出来,通过神经网络离合出分界线模型。 采用l2正则化的源码: # 导入所需模块 import tensorflow as tf from matplotlib import pyplot as plt import numpy as np import pandas as pd # 读入数据/标签 生成x_train y_train df = pd.

TensorFlow2.1入门学习笔记(7)——损失函数

损失函数(loss): 预测值(y)与已知答案(y_)的差距 神经网络的优化目标: loss最小: $\Rightarrow\left\{\begin{array}{lr}{mse(Mean Aquared Error)}\\{自定义}\\{ce(Cross Entropy)}\end{array}\right.$ 均方误差mse:loss_mse = tf.reduce_mean(tf.square(y_-y)) $$MSE(y_,y)=\frac{\sum_{i=1}^{n}(y-y_)^2}{n}$$ 例 预测酸奶日销量y,x1、x2是影响日销量的因素。 建模前,应预先采集的数据有:每日x1、x2和销量y_(即已知答案,最佳的情况:产量=销量) 拟造数据集X,Y:y_=x1+x2 噪声:-0.05~+0.05 拟合可以预算销量的函数 import tensorflow as tf import numpy as np SEED = 23455 rdm = np.