本篇内容主要讲解“如何理解python进阶TensorFlow神经网络拟合线性及非线性函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解python进阶TensorFlow神经网络拟合线性及非线性函数”吧!
一、拟合线性函数
生成随机坐标
神经网络拟合
代码
二、拟合非线性函数
生成二次随机点
神经网络拟合
代码
学习率0.03,训练1000次:
学习率0.05,训练1000次:
学习率0.1,训练1000次:
可以发现,学习率为0.05时的训练效果是最好的。
1、生成x坐标
2、生成随机干扰
3、计算得到y坐标
4、画点
# 生成随机点 def Produce_Random_Data(): global x_data, y_data # 生成x坐标 x_data = np.random.rand(100) # 生成随机干扰 noise = np.random.normal(0, 0.01, x_data.shape) # 均值 标准差 输出的形状 # 计算y坐标 y_data = 0.2 * x_data + 0.3 + noise # 画点 plt.scatter(x_data, y_data)
1、创建神经网络
2、设置优化器与损失函数
3、训练(根据已有数据)
4、预测(给定横坐标,预测纵坐标)
# 创建神经网络(训练及预测) def Neural_Network(): # 1 创建神经网络 model = tf.keras.Sequential() # 为神经网络添加层 model.add(tf.keras.layers.Dense(units=1, input_dim=1)) # 隐藏层 神经元个数 输入神经元个数 # 2 设置优化器与损失函数 model.compile(optimizer=SGD(0.05), loss='mse') # 优化器 学习率0.05 损失函数 # SGD:随机梯度下降法 # mse:均方误差 # 3 训练 for i in range(1000): # 训练数据并返回损失 loss = model.train_on_batch(x_data, y_data) # print(loss) # 4 预测 y_pred = model.predict(x_data) # 5 显示预测结果(拟合线) plt.plot(x_data, y_pred, 'r-', lw=3) #lw:线条粗细
# 拟合线性函数 import os os.environ['TF_CPP_MIN_LOG_LEVEL']='2' import numpy as np import matplotlib.pyplot as plt import tensorflow as tf from tensorflow.keras.optimizers import SGD # 生成随机点 def Produce_Random_Data(): global x_data, y_data # 生成x坐标 x_data = np.random.rand(100) # 生成随机干扰 noise = np.random.normal(0, 0.01, x_data.shape) # 均值 标准差 输出的形状 # 计算y坐标 y_data = 0.2 * x_data + 0.3 + noise # 画点 plt.scatter(x_data, y_data) # 创建神经网络(训练及预测) def Neural_Network(): # 1 创建神经网络 model = tf.keras.Sequential() # 为神经网络添加层 model.add(tf.keras.layers.Dense(units=1, input_dim=1)) # 隐藏层 神经元个数 输入神经元个数 # 2 设置优化器与损失函数 model.compile(optimizer=SGD(0.05), loss='mse') # 优化器 学习率0.05 损失函数 # SGD:随机梯度下降法 # mse:均方误差 # 3 训练 for i in range(1000): # 训练数据并返回损失 loss = model.train_on_batch(x_data, y_data) # print(loss) # 4 预测 y_pred = model.predict(x_data) # 5 显示预测结果(拟合线) plt.plot(x_data, y_pred, 'r-', lw=3) #lw:线条粗细 # 1、生成随机点 Produce_Random_Data() # 2、神经网络训练与预测 Neural_Network() plt.show()
第一层10个神经元:
第一层5个神经元:
我感觉第一层5个神经元反而训练效果比10个的好。。。
步骤:
1、生成x坐标
2、生成随机干扰
3、计算y坐标
4、画散点图
# 生成随机点 def Produce_Random_Data(): global x_data, y_data # 生成x坐标 x_data = np.linspace(-0.5, 0.5, 200)[:, np.newaxis] # 增加一个维度 # 生成噪声 noise = np.random.normal(0, 0.02, x_data.shape) # 均值 方差 # 计算y坐标 y_data = np.square(x_data) + noise # 画散点图 plt.scatter(x_data, y_data)
步骤:
1、创建神经网络
2、设置优化器及损失函数
3、训练(根据已有数据)
4、预测(给定横坐标,预测纵坐标)
5、画图
# 神经网络拟合(训练及预测) def Neural_Network(): # 1 创建神经网络 model = tf.keras.Sequential() # 添加层 # 注:input_dim(输入神经元个数)只需要在输入层重视设置,后面的网络可以自动推断出该层的对应输入 model.add(tf.keras.layers.Dense(units=5, input_dim=1, activation='tanh')) # 神经元个数 输入神经元个数 激活函数 model.add(tf.keras.layers.Dense(units=1, activation='tanh')) # 2 设置优化器和损失函数 model.compile(optimizer=SGD(0.3), loss='mse') # 优化器 学习率 损失函数(均方误差) # 3 训练 for i in range(3000): # 训练一次数据,返回loss loss = model.train_on_batch(x_data, y_data) # 4 预测 y_pred = model.predict(x_data) # 5 画图 plt.plot(x_data, y_pred, 'r-', lw=5)
# 拟合非线性函数 import os os.environ['TF_CPP_MIN_LOG_LEVEL']='2' import numpy as np import matplotlib.pyplot as plt import tensorflow as tf from tensorflow.keras.optimizers import SGD # 生成随机点 def Produce_Random_Data(): global x_data, y_data # 生成x坐标 x_data = np.linspace(-0.5, 0.5, 200)[:, np.newaxis] # 增加一个维度 # 生成噪声 noise = np.random.normal(0, 0.02, x_data.shape) # 均值 方差 # 计算y坐标 y_data = np.square(x_data) + noise # 画散点图 plt.scatter(x_data, y_data) # 神经网络拟合(训练及预测) def Neural_Network(): # 1 创建神经网络 model = tf.keras.Sequential() # 添加层 # 注:input_dim(输入神经元个数)只需要在输入层重视设置,后面的网络可以自动推断出该层的对应输入 model.add(tf.keras.layers.Dense(units=5, input_dim=1, activation='tanh')) # 神经元个数 输入神经元个数 激活函数 model.add(tf.keras.layers.Dense(units=1, activation='tanh')) # 输出神经元个数 # 2 设置优化器和损失函数 model.compile(optimizer=SGD(0.3), loss='mse') # 优化器 学习率 损失函数(均方误差) # 3 训练 for i in range(3000): # 训练一次数据,返回loss loss = model.train_on_batch(x_data, y_data) # 4 预测 y_pred = model.predict(x_data) # 5 画图 plt.plot(x_data, y_pred, 'r-', lw=5) # 1、生成随机点 Produce_Random_Data() # 2、神经网络训练与预测 Neural_Network() plt.show()
到此,相信大家对“如何理解python进阶TensorFlow神经网络拟合线性及非线性函数”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。