Python3:《机器学习笔记与实战》之神经网络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))