TensorFlow学习记录1,简单曲线拟合

学习TensorFlow记录1

1.搭建前向回馈神经网络(BP神经网络)

环境: TensorFlow2.0 python3.7.6
注意对于TensorFlow2.0不再存在placeholder函数和一些基础函数,所以在使用的过程中:

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

这样设置TensorFlow2.0取消使用,使用TensorFlow1.x的版本就可以了。
TensorFlow介绍:
TensorFlow是一个基于数据流编程的符号数学系统,被广泛使用于各种机器学习算法的编程实现,前身是谷歌的神经网络算法库。

  1. 首先搭建一个前项回馈神经网络
def add_layer(input, in_size, out_size, activation_function=None):
    """
    :param input:数据输入
    :param in_size:输入数据的大小(第一层神经元个数)
    :param out_size:输出数据的大小(本层神经元个数)
    :param activation_function:激活函数
    :return:
    """
    Weight = tf.Variable(tf.random_normal([in_size, out_size]))  # 首次随机权重
    biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)  # 偏置初始化
    W_mul_x_plus_b = tf.matmul(input, Weight) + biases  # 卷积核运算
    if activation_function is None:
        output = W_mul_x_plus_b
    else:
        output = activation_function(W_mul_x_plus_b)
    return output

定义输入数据:

x_data = np.linspace(-1, 1, 300)[:, np.newaxis]
noise = np.random.normal(0, 0.05, x_data.shape)
y_data = np.square(x_data) + 1 + noise    

添加噪音noise

定义输入数据格式:

xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])

定义一个隐含层,含有十个神经元

hidden_layer1 = add_layer(xs, 1, 10,activation_function=tf.nn.relu)

定义一个输出层,输出层含有一个神经元

prediction = add_layer(hidden_layer1, 10, 1, activation_function=None)

接下来,定义训练过程进行训练

  1. 定义损失函数
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction), reduction_indices=[1]))
  1. 定义训练过程,使用梯度下降法使得loss达到最小,学习率设为0.1
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
  1. 变量的初始化
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
  1. 进行训练
for i in range(1000):
    # 训练迭代
    sess.run(train_step, feed_dict={xs: x_data, ys: y_data})
    if i % 100 == 0:
        # 输出当前loss 的值
        print(sess.run(loss, feed_dict={xs: x_data, ys: y_data}))
# 关闭训练
sess.close()

总代码如下:

# coding=gbk
# 搭建一个前项回馈神经网络
# 模拟一个曲线方程
# 创建一个神经网络层
import pandas as pd
import tensorflow.compat.v1 as tf
import numpy as np
import matplotlib.pyplot as plt


def add_layer(input, in_size, out_size, activation_function=None):
    """
    :param input:数据输入
    :param in_size:输入数据的大小(第一层神经元个数)
    :param out_size:输出数据的大小(本层神经元个数)
    :param activation_function:激活函数
    :return:
    """
    Weight = tf.Variable(tf.random_normal([in_size, out_size]))  # 首次随机权重
    biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)  # 偏置初始化
    W_mul_x_plus_b = tf.matmul(input, Weight) + biases  # 卷积核运算
    if activation_function is None:
        output = W_mul_x_plus_b
    else:
        output = activation_function(W_mul_x_plus_b)
    return output


if __name__ == '__main__':
    # 创建一个具有输入层、隐藏层、输出层的三层神经网络
    # 神经元个数分别为1,10,1
    # 创建输入数据
    tf.disable_v2_behavior()
    x_data = np.linspace(-1, 1, 300)[:, np.newaxis]
    # print(x_data)
    # print(x_data.shape)
    noise = np.random.normal(0, 0.05, x_data.shape)
    y_data = np.square(x_data) + 1 + noise
    # data = pd.read_csv('housing_s.csv')
    # x_data = data.drop(['median_house_value'], axis=1)
    # y_data = data['median_house_value'][:, np.newaxis]
    print(x_data.shape)
    print(y_data.shape)
    # 定义数据的格式
    xs = tf.placeholder(tf.float32, [None, 1])
    ys = tf.placeholder(tf.float32, [None, 1])
    # 定义一个隐含层
    hidden_layer1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)
    # 定义一个输出层 含有一个神经元
    prediction = add_layer(hidden_layer1, 10, 1, activation_function=None)
    # 定义训练过程 并 进行训练
    # 求解神经网络参数
    # 1.定义损失函数
    loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction), reduction_indices=[1]))
    # 2.定义训练过程 使用梯度下降法使得误差最小,学习率为0.1
    train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
    # 变量初始化
    init = tf.global_variables_initializer()
    sess = tf.Session()
    # 执行初始化
    sess.run(init)
    # 3.进行训练
    for i in range(1000):
        # 训练迭代
        sess.run(train_step, feed_dict={xs: x_data, ys: y_data})
        if i % 100 == 0:
            # 输出当前loss 的值
            print(sess.run(loss, feed_dict={xs: x_data, ys: y_data}))
    # 关闭训练
    sess.close()

执行结果如下:
在这里插入图片描述

发布了65 篇原创文章 · 获赞 29 · 访问量 6503

猜你喜欢

转载自blog.csdn.net/qq_41617848/article/details/104007747