学习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是一个基于数据流编程的符号数学系统,被广泛使用于各种机器学习算法的编程实现,前身是谷歌的神经网络算法库。
- 首先搭建一个前项回馈神经网络
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)
接下来,定义训练过程进行训练
- 定义损失函数
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction), reduction_indices=[1]))
- 定义训练过程,使用梯度下降法使得loss达到最小,学习率设为0.1
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
- 变量的初始化
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
- 进行训练
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()
执行结果如下: