Tensorflow之简单的线性和非线性拟合

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()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/duanyuwangyuyan/article/details/107949095
今日推荐