Tensorflow学习笔记-神经网络优化

本文介绍了神经网络优化的相关概念,包括神经元模型、激活函数、损失函数、学习率和正则化。讨论了如何在TensorFlow中实现if else语句、自定义损失函数、交叉熵损失、指数衰减学习率以及L1和L2正则化。着重强调了在TensorFlow中优化神经网络参数的方法和技巧。
摘要由CSDN通过智能技术生成

神经网络优化

  • 神经元模型:神经网络的基本单位
  • 激活函数:映入非线性激活因素,提高模型的表达力。
    常用的激活函数为ReLu、Sigmod、tanh等
    一般为了防止梯度消失(vanishing gradient)和梯度爆炸(gradient explording)常选用ReLu(注:CS231N也指出过常用的激活函数为ReLu)
tf.nn.relu()
tf.nn.sigmoid()
tf.nn.tanh()
  • 神经网络的复杂度:可用神经网络的层数和神经网络待优化参数的个数表示
  • 神经网络的层数:一般不计入输入层, 层数 = n个隐藏层 + 1个输入层
  • 神经网络待优化参数: 神经网络中所有参数W的个数 + 1个输出层
  • 损失函数(loss):用来表示预测值(y)与已知答案(y_)的差距。 在训练神经网络时,通过不断改变神经网络中所有参数,使损失函数不断减小,从而训练出更高准确率的神经网络模型。
  • 常用的损失函数有均方误差、自定义和交叉熵等。

例如:
预测酸奶日销量 y, x1 和 x2 是影响日销量的两个因素。
即:用神经网络拟合y_ = X1 + X2的数据。为了更真实, 加入了正负0.05的随机噪声。

import tensorflow as tf
import numpy as np

BATCH_SIZE = 8
seed = 23455

rdm = np.random.RandomState(seed)
X = rdm.rand(32, 2)
Y_ = [[X1 + X2 + (rdm.rand() / 10.0 - 0.05)] for (X1, X2) in X]

x = tf.placeholder(tf.float32, shape=(None, 2))
y_ = tf.placeholder(tf.float32, shape=(None, 1))
w1 = tf.Variable(tf.random_normal([2, 1], stddev=1, seed=1))
y = tf.matmul(x, w1)

loss_mse = tf.reduce_mean(tf.square(y_ - y))
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss_mse)

with tf.Session() as sess:
    init_op = tf.global_variables_initializer()
    sess.run(init_op)
    STEPS = 20000
    for i in range(STEPS):
        start = (i * BATCH_SIZE) % 32
        end = start + BATCH_SIZE
        sess.run(train_step, feed_dict={x: X[start:end], y_: Y_[start:end]})
        if i % 500 == 0:
            print("After %d training step(s) " % i)
            print("w1 is ", sess.run(w1))

    print("Final w1 is :\n", sess.run(w1))

tip:可以尝试改变学习率的值,观察参数变化和收敛情况

Final w1 is :
[[0.98019385]
[1.0159807 ]]

* 预测结果 * : y = 0.98*X1 + 1.02*X2 基本符合

  • 自定义损失
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值