一、随机训练和批训练

  1. 随机训练:一次随机抽样训练数据和目标数据对完成训练。
  2. 批训练:一次大批量训练取平均损失来进行梯度计算,批量训练大小可以一次上扩到整个数据集。
  3. 批训练和随机训练的差异优化器方法收敛的不同
  4. 批训练的难点在于:确定合适的batch_size
  5. 二者比较
训练类型 优点 缺点
随机训练 脱离局部最小 一般需要更多的迭代次数才收敛
批训练 快速得到最小损失 耗费更多的计算资源

二、实现随机训练

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.python.framework import ops
ops.reset_default_graph()
# 一、随机训练:# 1.创建计算图
sess = tf.Session()# 2.创建数据
x_vals = np.random.normal(1, 0.1, 100)
y_vals = np.repeat(10., 100)
x_data = tf.placeholder(shape=[1], dtype=tf.float32)
y_target = tf.placeholder(shape=[1], dtype=tf.float32)# 3.创建变量
A = tf.Variable(tf.random_normal(shape=[1]))# 4.增加图操作
my_output = tf.multiply(x_data, A)# 5.声明L2正则损失
loss = tf.square(my_output - y_target)# 6.声明优化器 学习率为0.02
my_opt = tf.train.GradientDescentOptimizer(0.02)
train_step = my_opt.minimize(loss)# 7.初始化变量
init = tf.global_variables_initializer()
sess.run(init)# 8.保存loss数据用于绘图
loss_stochastic = []# 9.开始训练
for i in range(100):rand_index = np.random.choice(100)rand_x = [x_vals[rand_index]]rand_y = [y_vals[rand_index]]sess.run(train_step, feed_dict={x_data: rand_x, y_target: rand_y})if (i+1)%5==0:print('Step #' + str(i+1) + ' A = ' + str(sess.run(A)))temp_loss = sess.run(loss, feed_dict={x_data: rand_x, y_target: rand_y})print('Loss = ' + str(temp_loss))loss_stochastic.append(temp_loss)
# 输出结果
Step #5 A = [2.0631378]
Loss = [60.90259]
Step #10 A = [3.560384]
Loss = [35.39518]
Step #15 A = [4.7225595]
Loss = [37.812637]
Step #20 A = [5.681144]
Loss = [13.796157]
Step #25 A = [6.4919457]
Loss = [13.752169]
Step #30 A = [7.1609416]
Loss = [9.70855]
Step #35 A = [7.710085]
Loss = [5.826261]
Step #40 A = [8.253489]
Loss = [7.3934216]
Step #45 A = [8.671478]
Loss = [2.5475926]
Step #50 A = [8.993064]
Loss = [1.32571]
Step #55 A = [9.101872]
Loss = [0.67589337]
Step #60 A = [9.256593]
Loss = [5.34419]
Step #65 A = [9.329251]
Loss = [0.58555096]
Step #70 A = [9.421848]
Loss = [3.088755]
Step #75 A = [9.563117]
Loss = [6.0601945]
Step #80 A = [9.661991]
Loss = [0.05205128]
Step #85 A = [9.8208685]
Loss = [2.3963788]
Step #90 A = [9.8652935]
Loss = [0.19284673]
Step #95 A = [9.842097]
Loss = [4.9211507]
Step #100 A = [10.044914]
Loss = [4.2354054]

三、实现批训练

import numpy as np
import tensorflow as tf
import matplotlib as pltfrom tensorflow.python.framework import ops
ops.reset_default_graph()sess = tf.Session()# 1.声明批量大小(一次传入多少训练数据)
batch_size = 20# 2.声明模型的数据、占位符和变量。
# 这里能做的是改变占位符的形状,占位符有两个维度:
# 第一个维度为None,第二个维度是批量训练中的数据量。
# 我们能显式地设置维度为20,也能设为None。
# 我们必须知道训练模型中的维度,从而阻止不合法的矩阵操作
x_vals = np.random.normal(1,0.1,100)
y_vals = np.repeat(10.,100)
x_data = tf.placeholder(shape=[None, 1], dtype=tf.float32)
y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32)
A = tf.Variable(tf.random_normal(shape=[1,1]))# 3.现在在计算图中增加矩阵乘法操作,
# 切记矩阵乘法不满足交换律,所以在matmul()函数中的矩阵参数顺序要正确:
my_output = tf.multiply(x_data, A)# 4.改变损失函数
# 批量训练时损失函数是每个数据点L2损失的平均值
loss = tf.reduce_mean(tf.square(my_output - y_target))# 5.声明优化器
my_opt = tf.train.GradientDescentOptimizer(0.02)
train_step = my_opt.minimize(loss)# 6.在训练中通过循环迭代优化模型算法。
# 为了绘制损失值图与随机训练对比
# 这里初始化一个列表每间隔5次迭代保存损失函数# 初始化变量
init = tf.global_variables_initializer()
sess.run(init)loss_batch = []
for i in range(100):# 每次用0~100中取20个数作为索引值rand_index = np.random.choice(100, size=batch_size)# 转置rand_x = np.transpose([x_vals[rand_index]])rand_y = np.transpose([y_vals[rand_index]])sess.run(train_step, feed_dict={x_data:rand_x,y_target:rand_y})if (i+1)%5 == 0:print("Step # " + str(i+1) + ' A = ' + str(sess.run(A)))temp_loss = sess.run(loss, feed_dict={x_data:rand_x,y_target:rand_y})print('Loss = ' + str(temp_loss))loss_batch.append(temp_loss)
在这里插入代码片
# 输出结果
Step # 5 A = [[2.626382]]
Loss = 55.444374
Step # 10 A = [[3.980196]]
Loss = 36.855064
Step # 15 A = [[5.0858808]]
Loss = 22.765038
Step # 20 A = [[5.9751787]]
Loss = 15.496961
Step # 25 A = [[6.713659]]
Loss = 12.349718
Step # 30 A = [[7.2950797]]
Loss = 7.5467796
Step # 35 A = [[7.782353]]
Loss = 5.17468
Step # 40 A = [[8.20625]]
Loss = 4.1199327
Step # 45 A = [[8.509094]]
Loss = 2.6329637
Step # 50 A = [[8.760488]]
Loss = 1.9998455
Step # 55 A = [[8.967735]]
Loss = 1.6577679
Step # 60 A = [[9.1537]]
Loss = 1.4356906
Step # 65 A = [[9.317189]]
Loss = 1.9666836
Step # 70 A = [[9.387019]]
Loss = 1.9287064
Step # 75 A = [[9.499526]]
Loss = 1.7477573
Step # 80 A = [[9.594302]]
Loss = 1.719229
Step # 85 A = [[9.666611]]
Loss = 1.4769726
Step # 90 A = [[9.711805]]
Loss = 1.1235845
Step # 95 A = [[9.784608]]
Loss = 1.9176414
Step # 100 A = [[9.849552]]
Loss = 1.1561565

四、绘制图像

plt.plot(range(0, 100, 5), loss_stochastic, 'b-', label='Stochastic Loss')
plt.plot(range(0, 100, 5), loss_batch, 'r--', label='Batch Loss, size=20')
plt.legend(loc='upper right', prop={'size': 11})
plt.show()


从图中可以看出批训练损失更平滑,随机训练损失更不规则

【TensorFlow】随机训练和批训练的比较与实现相关推荐

  1. TensorFlow:随机打散、批训练、预处理、循环训练

    文章目录 一.随机打散 二.批训练 三.预处理 四.循环训练 一.随机打散 通过 Dataset.shuffle(buffer_size)工具可以设置Dataset 对象随机打散数据之间的顺序,防止每 ...

  2. python检测吸烟的算法_yolov3+tensorflow+keras实现吸烟的训练全流程及识别检测

    yolov3+tensorflow+keras实现吸烟的训练全流程及识别检测 弈休丶 2019-12-30 23:29:54 1591 收藏 19 分类专栏: 基于yolov3+tensorflow+ ...

  3. Tensorflow实践:用神经网络训练分类器

    正文共5873个字,3张图,预计阅读时间15分钟 . 任务: 使用tensorflow训练一个神经网络作为分类器,分类的数据点如下: 螺旋形数据点 原理 数据点一共有三个类别,而且是螺旋形交织在一起, ...

  4. tensorflow 1.14 ssd_mobilenet_v1 模型训练

    tensorflow 1.14 ssd_mobilenet_v1 模型训练 1 工具版本 序号 软件名称 版本 安装命令 1 操作系统 ubuntu 18.04 2 python 3.6.9 3 te ...

  5. PyTorch 实现批训练和 Optimizer 优化器

    批训练 import torch import torch.utils.data as DataBATCH_SIZE = 5x = torch.linspace(1, 10, 10) # this i ...

  6. 使用 TensorFlow 2.0 进行分布式训练

    TensorFlow官方最新翻译:https://www.tensorflow.org/guide/distributed_training?hl=zh-cn,本文的翻译过时了 概览 tf.distr ...

  7. TensorFlow(6)神经网络训练(DNN)

    目录 Fashion MNIST数据集 一.获取Mnist数据集 二.加载数据集 三.数据归一化 四.设计神经网络模型 五.模型编译&&训练 5-1.编译 5-2.训练 六.模型评估 ...

  8. Tensorflow + OpenCV4 安全帽检测模型训练与推理

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 开发环境 软件版本信息: Windows10 64位 Tensor ...

  9. R语言决策树、bagging、随机森林模型在训练集以及测试集的预测结果(accuray、F1、偏差Deviance)对比分析、计算训练集和测试集的预测结果的差值来分析模型的过拟合(overfit)情况

    R语言决策树.bagging.随机森林模型在训练集以及测试集的预测结果(accuray.F1.偏差Deviance)对比分析.计算训练集和测试集的预测结果的差值来分析模型的过拟合(overfit)情况 ...

最新文章

  1. data pump工具
  2. 钉钉头像大小设置 阿里cdn尺寸截取参数设置
  3. 计算机水平考试模拟卷,计算机等级考试模拟题
  4. Unity自定义事件相应区域
  5. leetcode934. 最短的桥(dfs+bfs)
  6. UEFI开发学习1 - Ubuntu18.04搭建edk2环境
  7. 计算机网络之对称密钥加密与非对称密钥加密
  8. 80004005错误代码_0x80004005,手把手教你解决0x80004005错误代码的方法
  9. 华为云域名注册_华为云申请个人域名步骤
  10. 养一只”无限猴子”帮你测试
  11. N95滤材之父:滤材才是关键!道翰天琼认知智能机器人平台API接口大脑为您揭秘。
  12. 人们已经离不开5G了,商用三年半,中国5G发展迈向新征程,产业发展全面提速!
  13. 操作系统实验报告_ucore_lab1
  14. 面试题:什么是野指针?产生野指针的原因?
  15. 一杯茶一包烟,一行代码码一天!用Python分析程序员抽的烟!
  16. 阿里云服务器ESSD云盘吞吐量IOPS及性能级别PL0、PL1、PL2和PL3参数说明
  17. 你小子,又在偷偷学this指向
  18. 【Spring入门学习00】Bean、POJO、DAO、BO的概念
  19. ADB:通过 Wi-Fi 连接到Android设备的两种方法
  20. WinCE下GPRS自动拨号软件(GPRS AutoDial)

热门文章

  1. php无法创建cookie,php-curl cookie无法成功创建
  2. python怎么画出好看的统计图_用最简单的 Python ,画最好看的图 [简单数据可视化]...
  3. ValueError: check_hostname requires server_hostname的解决办法
  4. LeetCode 2062. 统计字符串中的元音子字符串
  5. LeetCode 486. 预测赢家(博弈DP)
  6. LeetCode 340. 至多包含 K 个不同字符的最长子串(滑动窗口)
  7. LeetCode 999. 车的可用捕获量
  8. 《剑指Offer》解题目录(更新完毕)
  9. html设置div页面最底,使用css让大图片不超过网页宽度
  10. python算法入门_GitHub标星2.6万!Python算法新手入门大全