ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

神经网络工作原理概述

2021-08-02 13:33:24  阅读:245  来源: 互联网

标签:inputs features pred 神经网络 概述 print 原理 weights


1.从最简单的神经网路开始

在学习机器学习的过程中,大家对神经网络应该都有一个基本概念:神经网络就像一个函数拟合器,它可以拟合任意函数

def NeuralNetwork(inputs, weight): # 定义神经网络
    prediction = inputs * weight   # 将数据与权重相乘
    return prediction

inputs = 2  # 输入数据,可随意更换
weight = -1 # 权重
pred = NeuralNetwork(inputs, weight) # 前向传播,即获得预测结果
print(pred)

刚刚我们完成的就是前向传播的过程,也就是一个预测的过程 。

预测其实就是神经网络对输入数据进行“思考”后得到的结果。

2.神经网络工作原理概述

上面的那个神经网络将输入乘以权重,将输入数据“缩放”一定的比例

神经网络的交互:

1.接受输入的变量,并以此作为信息来源;

2.拥有权重变量,并以此作为知识;

3.融合信息和知识,输出预测结果

目前为止所有的神经网络都是这样工作的,他使用权重中的知识解释输入数据的信息。

另一种理解神经网络权重的方法是将权重作为网络的输入和预测之间敏感度的度量:如果权重非常高,即使是最小的输入也可以对预测结果产生非常大的影响;如果权重很小,那就算是很大的输入也只能对预测结果产生很小的扰动。

3.使用多个输入进行预测

在实际场景中,如果能给神经网络提供的信息越多,那么神经网络应该能做出更准确的预测

import numpy as np

weights = np.array([0.012, 0.3, 0.25])
inputs = np.array([26, 0.75, 1.2])

def NeuralNetwork(inputs, weights):
    pred=inputs.dot(weights)
      #dot()函数可以通过numpy库调用,也可以由数组实例对象进行调用。a.dot(b) 与 np.dot(a,b)效果相同。
    return pred

pred = NeuralNetwork(inputs, weights)
print(pred)

4.只用一个输入做出多个输出

多输出可能是比多输入更简单的拓展。如果是3个输出,则预测过程与三个单一权重的独立神经网络是一样的。需要注意的是,这3个预测结果完全独立。

假设我们在一场球赛上,想通过某个球队的胜负记录预测球员的心情(是高兴还是悲伤)、下一场比赛的结果以及队员的受伤比例,来看看这个例子怎么做:

import numpy as np

weights=np.arry([0.3,0.2,0.9])
inputs=0.65

def NeuralNetwork(inputs,weights):
    pred=inputs*weights
    return pred

pred = NeturalNetwork(inputs,weights)
#print(pred)
print("受伤比例预测:{}".format(pred[0]))
print("比赛胜负预测:{}".format(pred[1]))
print("悲伤程度预测:{}".format(pred[2]))

5.基于多个输入得到多个输出

基于给定的多个输入,神经网络预测得到多个输出。

假设我们在一场球赛上,想通过某个球队的胜负记录、粉丝数和球员数量来预测球员的心情(是高兴还是悲伤)、下一场比赛的结果以及队员的受伤比例,来看看这个例子怎么做:

import numpy as np

#从左到右分别是:[是否受伤, 是否胜利, 是否难过]
weights = np.array([[0.02, 0.01, 0.05],    #胜负记录
                    [0.001, 0.025, 0.04],  #粉丝数量
                    [0.013, 0.03, 0.001]]) #球员数量
inputs = np.array([0.65, 12.0, 8.0])       #分别是该球队的胜负记录、粉丝数量、球员数量

def NeuralNetwork(inputs, weights):
    pred = inputs.dot(weights)
    return pred

pred = NeuralNetwork(inputs, weights)
# print(pred)
print("受伤比例预测:{}".format(pred[0]))
print("比赛胜负预测:{}".format(pred[1]))
print("悲伤程度预测:{}".format(pred[2]))

6.用预测结果进一步预测

神经网络是可以堆叠的!可以将一个网络的输出提供给另一个网路作为输入。这相当于两个连续的向量矩阵乘法。

这样做的原因是:在处理复杂问题时,对于单一权重矩阵来说过于复杂(即参数的数量不够)。

建立大等于n的最小完全平方数模型:

# 生成输入数据
import numpy

num_inputs=1
num_examples=10
features = numpy.random.randint(1, 10, (num_examples, num_inputs))

import math

def PerfectSquare(n): # 求最小完全平方数的方法
    result = 0
    if n >= 0:
        result = n ** 0.5
        result = math.ceil(result)
        result = result ** 2
    return result

# 输出1~10的最小完全平方数
for item in range(1, 10):
    print(PerfectSquare(item), end=" ")

# 生成输入对应的标签
labels = []
for item in features[:,0].tolist():
    labels.append(PerfectSquare(item))
labels = numpy.expand_dims(labels, axis=-1) #注意:需要在最后增加一个维度

# 将数据转换成tensor
import paddle

features = features.astype('float32')
labels = labels.astype('float32')
train_datas = paddle.to_tensor(features)
y_true = paddle.to_tensor(labels)

#.构建线性回归模型
import paddle

model = paddle.nn.Linear(in_features=1, out_features=1) # 使用最简单的线性变换层

# 定义Momentum优化器
lr = paddle.optimizer.lr.CosineAnnealingDecay(learning_rate=0.25, T_max=100)
optimizer = paddle.optimizer.Adam(learning_rate=lr,
                                     parameters=model.parameters(),
                                     weight_decay=paddle.regularizer.L2Decay(0.0002))
mse_loss = paddle.nn.MSELoss() # 计算预测值和目标值的均方差误差

#模型训练
for i in range(100):
    y_predict = model(train_datas)
    loss = mse_loss(y_predict, y_true)
    loss.backward()
    optimizer.step()
    optimizer.clear_grad()

print(loss.numpy())

#模型检验
infer_features = numpy.random.randint(1, 10, (1, 1)).astype('float32')
infer_features = paddle.to_tensor(infer_features)

fetch_list = model(infer_features)

标签:inputs,features,pred,神经网络,概述,print,原理,weights
来源: https://blog.csdn.net/qq_52587975/article/details/119319010

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有