例子:拟合三维平面
数据集是npy类型,二进制的文件,以数组的形式呈现
步骤:
1.导入数据
2.构造线性模型
矩阵相乘,加权求核
3.定义损失函数
4.定义训练函数
5.启动图
6.初始化变量
7.开始训练
import numpy as np
import tensorflow as tf
import os
from DEA.tensor import sess
tf.compat.v1.disable_eager_execution()
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
# 忽略掉版本的错误
# 导入数据, 直接修改浮点型
data=np.float32(np.load('D:/科技数据/机器学习/tensorflow/line_fit_data.npy'))
x_data=data[:,:2] # 样本自变量
Y_data=data[:,2:] # 样本实际值
'''
定义计算(计算图)
'''
# 构建一个线性模型
w=tf.Variable(tf.zeros([2,1]))
bias=tf.Variable(tf.zeros([1]))
y=tf.matmul(x_data,w)+bias
# y 是tensor类型看不到具体取值
# 定义损失函数(均方误差)
loss = tf.reduce_mean(tf.square(Y_data-y))
# 构建梯度下降法优化器(梯度下降优化器,学习率=0.5)
optimizer=tf.compat.v1.train.GradientDescentOptimizer(0.5)
# 定义训练函数
train=optimizer.minimize(loss)
'''
执行计算(会话中)
'''
# 启动会话A
sess = tf.compat.v1.Session()
sess.run(tf.compat.v1.global_variables_initializer())
# 计算所有变量,也就是初始化变量
for i in range(100):
print('第',i, '轮训练后模型的损失值',sess.run(loss))
sess.run(train) # 开始训练,改变权重和偏置项
print(sess.run([w,bias])) # 0.0999*x1+0.1999*x2+0.3000
# 开始演练
sess.close()
注:
- 高阶版本的tensorflow,不能直接用tf.Session(),要修改成tf.compat.v1.Session()才能调用tf下的函数
- y 打印出来不是具体的数值类型,而是tensor类型,需要sess.run(y)一下,才能打印出具体的值
- 提前声明权重和偏置项是Variable,在后续的训练中可以识别出两个变量,并不断的改进
- numpy是通过C++来开发的
- tensorflow将计算过程完全运行在python外部
- TensorFlow依赖于一个高效的C++后端来进行计算,并通过session连接。先创建一个图,然后在session中启动它