• 学习笔记TF055:TensorFlow神经网络简单实现一元二次函数


    TensorFlow运行方式。加载数据、定义超参数,构建网络,训练模型,评估模型、预测。

    构造一个满足一元二次函数y=ax^2+b原始数据,构建最简单神经网络,包含输入层、隐藏层、输出层。TensorFlow学习隐藏层、输出层weights、biases。观察训练次数增加,损失值变化。

    生成、加载数据。方程y=x^2-0.5。构造满足方程的x、y。加入不满足方程噪声点。

    import tensor flow as tf
    import bumpy as np
    # 构造满中一元二次方程的函数
    x_data = np.linspace(-1,1,300)[:,np.newaxis] # 构建起300个点,分布在-1到1区间,用np生成等差数列,300个点的一维数组转换为300x1的二维数组
    noise = np.random.normal(0, 0.05, x_data.shape) # 加入噪声点,与x_data维度一致,拟合均值0、方差0.05正态分布
    y_data = np.square(x_data) - 0.5 + noise # y = x^2 - 0.5 + 噪声

    定义x、y占位符作输入神经网络变量。

    xs = tf.placeholder(tf.float32, [None, 1])
    ys = tf.placeholder(tf.float32, [None, 1])

    构建网络模型。

    构建一个隐藏层,一个输出层。输入参数4个变量,输入数据、输入数据维度、输出数据维度、激活函数。每层向量化处理(y = weights*x +biases),激活函数非线性化处理,输出数据。定义隐藏层、输出层:

    def add_layer(inputs, in_size, out_size, activation_function=None):
    # 构建权重:in_size*out_size 大小的矩阵
    weights = tf.Variable(tf.random_normal([in_size, out_size]))
    # 构建偏置:1 * out_size矩阵
    biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)
    # 矩阵相乘
    Wx_plus_b = tf.matmul(inputs, weights) + biases
    if activation_function is None:
    outputs = Wx_plus_b
    else:
    outputs = activation_function(Wx_plus_b)
    return outputs #得到输出数据
    # 构建隐藏层,假设隐藏层有10个神经元
    h1 = add_layer(xs, 1, 20, activation_function=tf.nn.relu)
    # 构建输出层,假设输出层和输入层一样,有1个神经元
    prediction = add_layer(h1, 20, 1, activation_function=None)

    构建损失函数,计算输出层预测值、真实值间误差。二者差的平方求和再取平均。梯度下降法,以0.1效率最小化损失。

    loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction), reduction_indices=[1]))
    train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

    训练模型。训练1000次,每50次输出训练损失值。

    init = tf.global_variables_initializer() # 初始化所有变量
    sess = tf.Session()
    sess.run(init)

    for i in range(1000): # 训练1000次
    sess.run(train_step, feed_dict = (xs: x_data, ys: y_data)
    if i % 50 == 0: #每50次打印出一次损失值
    print(sets.run(loss, feed_dict={xs: x_data, ys: y_data}))

    训练权重值,模型拟合y = x^2-0.5的系数1和-0.5。损失值越来越小,训练参数越来越逼近目标结果。评估模型,学习系数weights、biase前向传播后和真值y = x^2-0.5结果系数比较,根据相近程度计算准确率。

    超参数设定。hyper-parameters,机器学习模型框架参数。手动设定、不断试错。

    学习率(learning rate),设置越大,训练时间越短,速度越快。设置越小,训练准确度越高。可变学习率,训练过程记录最桂准确率,连续n轮(epoch)没达到最佳准确率,认为准确率不再提高,停止训练,early stopping,no_improvement-in-n规则。学习率减半,再满足时再减半。逐渐接近最优解,学习率越小,准确度越高。

    mini-batch大小。每批大小决定权重更新规则。整批样本梯度全部计算完,才求平均值,更新权重。批次越大训练速度越快,利用矩阵、线性代数库加速,权重更新频率低。批次越小,训练速度越慢。结合机器硬件性能与数据集大小设定。

    正则项系数(regularization parameter,λ)。凭经验。复杂网络出现明显过拟合(训练数据准确率高,测试数据准确率下降)。一开始设0,确定好学习率,再给λ设值,根据准确率精细调整。

    参考资料:
    《TensorFlow技术解析与实战》

    欢迎推荐上海机器学习工作机会,我的微信:qingxingfengzi

  • 相关阅读:
    Asp.net Core 系列之--5.认证、授权与自定义权限的实现
    Asp.net Core 系列之--4.事务、日志及错误处理
    Asp.net Core 系列之--3.领域、仓储、服务简单实现
    Asp.net Core 系列之--2.ORM初探:Dapper实现MySql数据库各类操作
    Asp.net Core 系列之--1.事件驱动初探:简单事件总线实现(SimpleEventBus)
    Cocos2d-x项目创建
    Cocos2d-x编译Android环境
    Linux 之 RPM
    Channels实现扫码登录
    SQLALchemy中关于复杂关系表模型的映射处理
  • 原文地址:https://www.cnblogs.com/libinggen/p/7777101.html
Copyright © 2020-2023  润新知