1. 线性拟合
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
def get_data(number):
list_x = np.random.rand(number)
list_label = 2 * list_x + 2
return list_x, list_label
w = tf.Variable(0.0)
b = tf.Variable(0.0)
X = tf.placeholder(tf.float32, name='X')
Y = tf.placeholder(tf.float32, name='Y')
Y_pre = X * w + b
loss = tf.square(Y-Y_pre)
optimizer = tf.train.GradientDescentOptimizer(0.002).minimize(loss)
init_op = tf.global_variables_initializer()
shape = 100
total = []
train_x, train_label = get_data(shape)
with tf.Session() as sess:
sess.run(init_op)
for i in range(100):
total_loss = 0
for x,y in zip(train_x, train_label):
_, l = sess.run([optimizer, loss], feed_dict={X:x, Y:y})
total_loss += l
total.append(total_loss/shape)
w_v, b_v = sess.run([w,b])
print(w_v, b_v)
plt.plot(train_x, train_label, 'bo', label='train data')
# label_pre = w_v * train_x + b_v
x = np.linspace(train_x.min(), train_x.max())
y = w_v * x + b_v
# plt.plot(train_x, label_pre, 'r*', label='predict data')
plt.plot(x, y, 'r-', label='predict data')
plt.legend()
plt.show()
plt.plot(total)
plt.show()
2. 非线性二次曲线拟合
# !/usr/bin/python
# -*- encoding: utf-8 -*-
import os
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
# 忽略不想提示警告错误的信息
# 1是提示,2是警告,3是错误
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
# load data
x_train = np.random.rand(100)
y_train = x_train**2 + 2
x2_train = x_train**2
data_length = len(x_train)
print(data_length)
# tensorflow 占位符
X = tf.placeholder(tf.float32, name='X')
X2 = tf.placeholder(tf.float32, name='X2')
Y = tf.placeholder(tf.float32, name='Y')
# 拟合二次曲线
w1 = tf.Variable(0.0)
w2 = tf.Variable(0.0)
b = tf.Variable(0.0)
Y_pre = X2*w1 + X*w2 + b
# 模型损失函数
# loss = tf.reduce_mean(tf.square(Y-Y_pre), name='loss')
loss = tf.square(Y-Y_pre, name='loss')
# 梯度下降法
learn_rate = 0.1
optimizer = tf.train.GradientDescentOptimizer(learning_rate=learn_rate).minimize(loss)
# 初始化变量
init_op = tf.global_variables_initializer()
# tensorflow 计算图训练
# 训练迭代次数 100次
iters = 100
with tf.Session() as sess:
sess.run(init_op)
summary_writer = tf.summary.FileWriter('./calc_graph',sess.graph )
for i in range(iters):
for x,y,z in zip(x_train,y_train,x2_train):
sess.run([optimizer,loss], feed_dict = {X:x, Y:y, X2:z})
w1_v, w2_v, b_v = sess.run([w1, w2, b])
summary_writer.close()
print(w1_v, w2_v, b_v)
# 画图
# sample data
plt.title('learning_rage: {0}, iteration: {1}'.format(learn_rate, iters))
plt.text(0, 2.8, 'w1: {:.5f}, w2: {:.5f}, b: {:.5f}'.format(w1_v, w2_v, b_v))
plt.plot(x_train, y_train, 'bo', label='train data')
# predict data
y_pre = x2_train*w1_v + x_train*w2_v + b_v
plt.plot(x_train, y_pre, 'r*', label='predict data')
plt.legend()
plt.show()