tensorflow:《机器学习笔记与实战》之神经网络4.1损失函数

1.搭建神经网络-两个重要步骤

       1.1 前向传播搭建网络结构 

       1.2 反向传播 训练网络参数

2.常用的激活函数

3.神经网络层数计算

3.1只计算有运算能力的层

4.神经网络的优化

4.1从损失函数、学习率、滑动平均、正则化四个方面来优化。

5.一段简单的预测酸奶日销量的代码。

5.1 安装tensorflow 后出错

ImportError: DLL load failed with error code -1073741795
 from tensorflow.python import pywrap_tensorflow  # pylint: disable=unused-import
from tensorflow._api.v1 import app
from tensorflow.python import pywrap_tensorflow

这是我安装的tf 版本

我的anaconda是3.6.5

原因是:问题的原因是我的电脑的cpu比较老,不支持AVX指令导致的,需要安装特殊编译的tensorflow 1.6.0版本或者tensorflow 1.5.0才可以解决,注意安装时要先卸载先前安装的1.8.0版本

pip install Tensorflow==1.5

我执行此命令后,可以正常使用。

下面这段代码可以直接运行

 

#coding:utf-8
#根据x1 x2 预测酸奶的日销量
import tensorflow as tf
import numpy as np
BATCH_SIZE =8 #每次喂如 一小批的特征数
SEED =23455 #种子数

rdm =np.random.RandomState(SEED)
X = rdm.rand(32,2)#32行 2列的X值
Y_ = [[x1+x2+(rdm.rand()/10.0-0.05)]for (x1,x2) in X] #构建Y_=x1+x2+随机噪声
#print("X",X)

#1定义神经网络的输入、参数、输出,定义前向传播过程
x = tf.placeholder(tf.float32, shape=(None, 2))#输入2个x1,x2 和一个y_训练模型
y_ = tf.placeholder(tf.float32, shape=(None, 1))#输入2个x1,x2 和一个y_训练模型
w1 = tf.Variable(tf.random_normal([2,1], stddev=1, seed=1))#输出参数 每个x对应一个参数
y = tf.matmul(x, w1)#输出一个预测值y

#2定义损失函数及反向传播方法。
#定义损失函数为MSE,反向传播方法为梯度下降。
loss_mse = tf.reduce_mean(tf.square(y_-y))#损失函数
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss_mse)#学习率0.001 梯度下降函数GDO

#3生成会话,训练STEPS轮
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 = (i*BATCH_SIZE) % 32 + BATCH_SIZE #切片的结束位置
        sess.run(train_step, feed_dict={x:X[start:end],y_:Y_[start:end]})
        if i % 2000 ==0:
            print("after %d training steps, w1 is :"%(i))
            print(sess.run(w1),"\n")
    print("final w1 is:\n",sess.run(w1))

6.自定义的损失函数

自定义函数的代码,考虑了经营的成本和利润

#coding:utf-8
#自定义损失函数
#根据x1 x2 预测酸奶的日销量
import tensorflow as tf
import numpy as np
BATCH_SIZE =8 #每次喂如 一小批的特征数
SEED =23455 #种子数
COST = 9
PROFIT = 1

rdm =np.random.RandomState(SEED)
X = rdm.rand(32,2)#32行 2列的X值
Y_ = [[x1+x2+(rdm.rand()/10.0-0.05)]for (x1,x2) in X] #构建Y_=x1+x2+随机噪声
#print("X",X)

#1定义神经网络的输入、参数、输出,定义前向传播过程
x = tf.placeholder(tf.float32, shape=(None, 2))#输入2个x1,x2 和一个y_训练模型
y_ = tf.placeholder(tf.float32, shape=(None, 1))#输入2个x1,x2 和一个y_训练模型
w1 = tf.Variable(tf.random_normal([2,1], stddev=1, seed=1))#输出参数 每个x对应一个参数
y = tf.matmul(x, w1)#输出一个预测值y

#2定义损失函数及反向传播方法。
#定义损失函数为MSE,反向传播方法为梯度下降。
loss_mse = tf.reduce_sum(tf.where(tf.greater(y,y_),(y-y_)*COST,(y_-y)*PROFIT))#损失函数
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss_mse)#学习率0.001 梯度下降函数GDO

#3生成会话,训练STEPS轮
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 = (i*BATCH_SIZE) % 32 + BATCH_SIZE #切片的结束位置
        sess.run(train_step, feed_dict={x:X[start:end],y_:Y_[start:end]})
        if i % 2000 ==0:
            print("after %d training steps, w1 is :"%(i))
            print(sess.run(w1),"\n")
    print("final w1 is:\n",sess.run(w1))

7. 交叉熵损失函数

工程案例中用红框的两句代码替代上图最有一行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值