深度学习--TensorFlow(6)神经网络 -- 拟合线性函数&&非线性函数

目录

一、拟合线性函数

1、生成随机坐标

2、神经网络拟合

代码

二、拟合非线性函数

1、生成二次随机点

2、神经网络拟合

代码


一、拟合线性函数

学习率0.03,训练1000次:

学习率0.05,训练1000次:

学习率0.1,训练1000次: 

 可以发现,学习率为0.05时的训练效果是最好的。

1、生成随机坐标

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)

2、神经网络拟合

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、生成二次随机点

 步骤:

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)

2、神经网络拟合

步骤:

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

  • 9
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
### 回答1: 神经网络是一种强大的机器学习算法,可用于解决非线性回归问题。在Python中,我们可以使用各种库和框架来构建和训练神经网络模型。 首先,我们可以使用NumPy库来处理数据。我们可以将输入和输出数据转换为NumPy数组,并进行数据预处理,如归一化或标准化。 然后,我们可以使用一些流行的深度学习框架,如TensorFlow、Keras或PyTorch来构建神经网络模型。这些框架提供了一系列的API来定义和训练模型。 对于非线性回归问题,我们可以选择使用适当的激活函数来引入非线性性质。常用的激活函数包括ReLU、Sigmoid和Tanh等。这些激活函数能够处理非线性关系,使得神经网络能够学习和预测非线性数据。 我们可以选择合适的网络结构,包括输入层、隐藏层和输出层来构建神经网络模型。隐藏层可以具有不同的层级和节点数量,以适应问题的复杂性和数据的特征。 在模型构建完成后,我们可以使用训练数据对神经网络进行训练。神经网络会通过正向传播和反向传播来自动调整权重和偏差,以最小化预测与实际值之间的误差。我们可以选择合适的损失函数来度量模型的性能。 训练完成后,我们可以使用测试数据对模型进行评估。通过计算模型的预测输出与实际输出之间的误差指标,如均方误差(MSE)或平均绝对误差(MAE),我们可以了解模型的效果和准确性。 总之,Python神经网络可以有效地解决非线性回归问题。通过选择合适的框架、激活函数和网络结构,并进行适当的数据处理和模型训练,我们可以构建出准确性高的神经网络模型。 ### 回答2: Python神经网络可以用于非线性回归问题。在神经网络中,通过多个神经元进行信息传递和处理,可以建立更复杂的非线性关系模型。 首先,需要导入相应的Python库,例如TensorFlow或者Keras来构建和训练神经网络模型。然后,可以定义神经网络的结构,包括输入层、隐藏层和输出层的个数和节点。可以选择激活函数,如ReLU、sigmoid或者tanh来引入非线性变换。隐藏层的数量和节点数也可以根据问题的复杂度进行调整。 接下来,需要准备训练数据集和测试数据集。对于非线性回归问题,通常需要对数据进行预处理,例如标准化或者正则化,以提高训练效果。然后,可以将数据输入到神经网络中进行训练。通过迭代的方式,不断调整神经网络的权重和偏差,使得预测值与实际值之间的误差最小化。 当训练完成后,可以使用测试数据集来评估模型的性能。通过观察预测结果与实际结果的差异,可以判断模型的准确性和泛化能力。如果模型的表现不理想,可以进行超参数调整、增加训练样本、调整网络结构等操作来改进模型性能。 总之,Python神经网络可以很好地应用于非线性回归问题。通过适当的数据预处理和合理的网络设计,可以构建出能够拟合复杂非线性关系的模型,实现精确的回归预测。 ### 回答3: Python神经网络可以用来进行非线性回归任务。神经网络是一种基于人类神经系统的计算模型,可以通过学习数据的模式和趋势,从而预测未知数据点的输出。 在神经网络中,数据被输入到输入层,通过一系列连接的神经元传递到输出层。每个神经元都有一定数量的权重,用来调整输入信号的重要性。神经网络通过反向传播算法来调整这些权重,以最小化预测值与实际值之间的误差。 对于非线性回归问题,神经网络通过在隐藏层中添加非线性的激活函数来引入非线性。常用的激活函数有sigmoid函数、ReLU函数和tanh函数等。这些激活函数允许神经网络学习复杂的非线性关系,从而更好地拟合非线性回归的数据。 为了训练神经网络进行非线性回归,我们需要准备带有输入和输出的训练数据。通过迭代训练神经网络,即多次传递数据并调整权重,可以使神经网络逐渐提高输出的准确性。 在实际应用中,我们可以使用Python中的各种库和框架来构建和训练神经网络,如TensorFlow、Keras和PyTorch等。这些工具提供了丰富的功能和易于使用的接口,使得非线性回归任务的实现变得简单而高效。 总之,Python神经网络是一种强大的工具,可用于解决非线性回归问题。通过合适的模型和训练方法,我们可以利用神经网络来预测未知数据点的输出,并实现准确的非线性回归。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_(*^▽^*)_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值