神经网络 | 一次函数、二次函数、线性拟合

一次函数

对于拟合一元一次函数,我们只需要一个神经元:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
import numpy as np
import matplotlib.pyplot as plt
import os
#tf.enable_eager_execution()
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

x_test = np.linspace(-200,200,1000)
y_test = x_test * 3.14 + 2.12
x_data = np.random.uniform(-100,100,10000)
y_data = x_data * 3.14 + 2.12 + np.random.normal(0,20,10000)
plt.plot(x_data,y_data,'.')
plt.plot(x_test,y_test)

model = tf.keras.Sequential()
model.add(layers.Dense(1, activation=None))

model.compile(optimizer=tf.keras.optimizers.Adam(0.1),
              loss='mse',       # mean squared error
              metrics=['mae'])  # mean absolute error

model.fit(x_data.reshape(-1,1), y_data.reshape(-1,1), epochs=10, batch_size=20)

y_pred = model.predict(x_test,batch_size=20)
plt.plot(x_test,y_pred,'--')

注意此时我们不需要激发函数,所以将神经元中的激发函数设置为None。(也可以设置为linear)

神经网络模型中需要注意的是输出层的神经元数量需要与y_data的维度相同。
如果y_data的维度为1,输出层有n个神经元,则之后的预测值y_pred也会相应的维度变为n,并且每一个维度数值相同。
如果输出层有1一个神经元,y_data的维度为n,则之后的预测值y_pred维度变为1,训练结果更接近y_data取均值后的结果。这可能是矩阵运算中的降维处理造成的。
其他维度不匹配的情况会报错。

线性拟合

我们尝试拟合一个多元线性模型:

k1 = 3.14
k2 = 5.67
k3 = 2
k4 = 2
b = 10
beta = 2

x1_data = np.random.uniform(-100,100,10000)
x2_data = np.random.uniform(-100,100,10000)
x3_data = np.random.uniform(-100,100,10000)
x4_data = np.random.uniform(-100,100,10000)
be_data = np.zeros(10000)
be_data
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值