Tensorflow2.0学习笔记
Tensorflow2.0
1.张量(Tensor)
张量(Tensor):多维数组(列表) 阶:张量的维数
| 维数 | 阶 | 名字 | 例子 |
|---|---|---|---|
| 0-D | 0 | 标量 scalar | s=1 2 3 |
| 1-D | 1 | 向量 vector | v=[1,2,3] |
| 2-D | 2 | 矩阵 matrix | m=[[1,2,3],[4,5,6],[7,8,9]] |
| n-D | n | 张量 tensor | t=[[[ n个 |
张量可以表示0阶到N阶数组(列表)
- 数据类型
1.√tf.int,tf.float……
tf.int32,tf.float32,tf.float64
2.√tf.bool
tf.constant([True,False])
3.√tf.string
tf.constant(“hello,world!”)
- 创建张量
-
tf.constant(维度,dtype=数据类型) 创建张量
-
tf.zeros(维度)------创建全为0的张量
-
tf.ones(维度)-------创建全为的张量
-
tf.fill(维度,指定值)---创建指定值的张量
5.tf.random.normal(维度,mean=均值,stddev=标准差)--生成正态分布的随机数,默认均值为0,标准差为1
![]()
6.tf.random.truncted_normal(维度,mean=均值,stddev=标准差)
![]()
注意:在tf.truncated_normal中如果随机生成数据的取值在(u-2q,u+2q)之外则重新进行生成,保证了生成值在均值附近。 u=均值,q=标准差
![]()
7.tf.random.uniform(维度,minval=最小值,maxval=最大值)
![]()
8.tf.convert_to_tensor(数据名,dtype=数据类型)--将numpy数据类型的数据转换为Tensor数据类型的数据
2.复杂度学习率
- 神经网络(NN)复杂度
NN复杂度:多用NN层数和NN参数的个数表示
空间复杂度:
√ 层数=隐藏层的层数+1个输出层左图为2层NN
√ 总参数=总w+总b
左图34+4(第一层) +42+2( 第二层)=26
时间复杂度:
√ 乘加运算次数 左图34(第一层)+42(第二层)=20
- 学习率
- 激活函数
√ 优秀的激活函数:
非线性:激活函数非线性时,多层神经网络可逼近所有函数
卫微性:优化器大多用梯度下降更新参数
单调性:当激活函数是单调的,能保证单层网络的损失函数是凸函数
近似恒等性:f(x)≈x 当参数初始化为随机小值时,神经网络更稳定
√激活函数输出值的范围:
激活函数输出值为有限值时,基于梯度的优化方法更稳定
激活函数输出为无限值时,建议调小学习率
√ Sigmoid函数
√ Tanh函数
√ Relu函数
√ Leaky Relu函数
总结:
√首选relu激活函数;
√学习率设置较小值;
√输入特征标准化,即让输入特征满足以0为均值,1为标准差的正太分布;
√初始参数中心化,即让随机生成的参数满足以0为均值,“根号下当前层输入特征个数分之2”为标准差的正太分布
- 损失函数
损失函数:预测值与标准函数之间的差距,损失函数可以定量判断W,b的优劣,当损失函数输出最小时,参数W,b会出现最优值
梯度:函数对各参数求偏大后的向量。 函数梯度下降的方向就是函数减小的方向。
梯度下降法:沿损失函数梯度下降的方向,寻找损失函数的最小值,得到最优参数的方法。
-
√ 交叉熵损失函数CE(Cross Emtropy):表征两个概率分布之间的距离tf.losses.categorical_crossentropy(标准答案,输出结果)
-
softmax与交叉熵结合
√ 输出先过softmax函数,再计算y与与y_的交叉熵损失函数。或者直接用tf.nn.softmax_cross_entropy_with_logits(标准结果,输出值)
- 欠拟合与过拟合
欠拟合:欠拟合是模型不能有效拟合数据集,是对现有数据集的学习不够彻底
过拟合:模型对当前数据模拟的太好了,但对未见过的新数据难以做出判断
√ 欠拟合的解决方法:
- 增加输入项特征
- 增加网络参数
- 减少正则化参数
√ 过拟合的解决方法:
- 数据清洗
- 增大训练集
- 采用正则化
- 增大正则化参数
√ 正则化缓解过拟合
√ 正则化的选择
- L1正则化大概率会使很多参数变为零,因此该方法可通过稀疏参数,即减少参数的数量,降低复杂度。
- L2正则化会使参数很接近零但不为零,因此该方法可通过减小参数值的大小降低复杂度
- 神经网络参数优化器
- 搭建网络八股sequential
- 六步法:
- import 导入相关模块
- train ,test 导入要喂入网络的训练集和测试集
- model=tf.keras.models.Sequetial 搭建网络结构 , 逐层描述每层网络(相当于走一边前向传播)
- model.compile 配置训练方法选择优化器,损失函数,评测指标
- model.fit 执行训练过程,告知训练集和测试集的输入特征和标签,告知batch的个数是多少,迭代数据集的次数
- model.summary 用summary( )打印出网络的结构和参数统计
- Sequential搭建顺序网络结构
总结:用Sequential可以搭建上层输出就是下层输入的顺序网络结构,但无法写出带跳连的非顺序网络结构
- class类封装非顺序网络结构
import tensorflow as tf from tensorflow.keras.layers import Dense from tensorflow.keras import Model from sklearn import datasets import numpy as np x_train = datasets.load_iris().data y_train = datasets.load_iris().target np.random.seed(116) np.random.shuffle(x_train) np.random.seed(116) np.random.shuffle(y_train) tf.random.set_seed(116) class IrisModel(Model): def __init__(self): super(IrisModel, self).__init__() self.d1 = Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2()) def call(self, x): y = self.d1(x) return y model = IrisModel() model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1), loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics=['sparse_categorical_accuracy']) model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20) model.summary()
- 神经网络八股功能扩展
- 自制数据集,解决本领域应用
- 数据增强,扩充数据集
- 断点续训,存取模型
- 参数提取,把参数存入文本
- acc/loss 可视化,查看训练效果
- 应用程序,给图识物
- 自制数据集![]()

- 数据增强
- 断点续训
读取模型
load_weights(文件路径名) ------------------------------------------------------ eg: checkpoint_sava_path="./checkpoint/mnist.ckpt" if os.path.exits(check_sava_path+'.index'): print("{:-^30}".format("load the model"))保存模型
tf.kears.callbacks.ModelCheckpoint( filepath=路径文件名 sava_weights_only=True/False, #是否只保留模型参数 sava_best_only=True/False #是否只保留最优模型 ) history=model.fit(callbacks=[cp_callback]) ------------------------------------------------------ eg: cp_callback=tf.kears.callbacks.ModelCheckpoint( filepath=路径文件名 sava_weights_only=True, sava_best_only=True ) history=model.fit("训练输入特征","训练输入标签", batch_size="batch数", epoch="迭代次数", validation_data=("测试输入特征","测试输入标签"), validation_frep="每迭代多少次验证一次结果" )
- 参数提取
model.trainable_variables #返回模型可训练的参数
np.set_printoptions(threshold=超过多少省略显示)#设置print输出格式
np.set_printoptions(threshold=np.inf) #np.inf 表示无限大
------------------------------------------------------------
#存入文本
print(model.trainable_variables)
file=open('./weights.txt','w')
for v in model.trainable_variables:
file.write(str(v.name)+'\n')
file.write(str(v.shape)+'\n')
file.write(str(v.numpy())+'\n')
file.close()
-acc&loss可视化
history=model.fit("训练集输入特征","训练集标签",
batch_size=,epochs=,
validation_split="用作测试数据的比例",
validation_data="测试集",
validation_frep="测试频率")
acc=history.history['sparse_catrgorical_accuracy']
val_acc=history.history['val_sparse_categorical']
loss=history.history['loss']
val_loss=history.history['val_loss']
- 给图识物
#前向传播执行应用
predict("输入特征",batch_size="整数")
#返回前向传播计算结果
#复现模型前向传播
model=tf.keras.models.Squential([
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128,activation='relu')
tf.keras.layers.Dense(10,activation='softmax')
])
#加载参数
model.load_weights(model_sava_path)
#预测结果
result=model.predict(x_predict)





















浙公网安备 33010602011771号