[Pytorch]多层感知机(MLP)回归的实现、训练与评估


前言

MLP是一种常用的前馈神经网络,使用了BP算法的MLP可以被称为BP神经网络。MLP的隐节点采用输入向量与权向量的内积作为激活函数的自变量,激活函数采用Relu函数。各参数对网络的输出具有同等地位的影响,因此MLP是对非线性映射的全局逼近。除了使用Sklearn提供的MLPRegressor函数以外,我们可以通过Pytorch建立自定义程度更高的人工神经网络。本文将不再对MLP的理论基础进行赘述,而将介绍MLP的具体建立方法。


一、网络主体构建

通过继承nn.Moudule类对MLP进行逐层建立

1.网络构建

该网络输入维度为8(即八个参量),输出为一个batch,即一个批训练的样本量,并在最后对Tensor进行展平。隐藏层分比为20,20,5,输出层为1,即预测值。

import torch.nn as nn
import torch.nn.functional as F

class MLP(nn.Module):
    def __init__(self):
        super(MLP, self).__init__()
        self.hidden1 = nn.Linear(in_features = 8, out_features = 20, bias = True)
        self.hidden2 = nn.Linear(20,20)
        self.hidden3 = nn.Linear(20,5)
        self.predict = nn.Linear(5,1)
    
    def forward(self,x):
        x = F.relu(self.hidden1(x))
        x = F.relu(self.hidden2(x))
        x = F.relu(self.hidden3(x))
        output = self.predict(x)
        out = output.view(-1)

        return out

1.网络结构可视化

使用Graphviz对这个简单的MLP进行可视化。
这里输入了一个64X8的张量,即代表一次性输入了64个8参量数据

import torch
from net import MLP
from torchviz import make_dot

tensor = torch.zeros(64,8).requires_grad_(True)
model = MLP()
net = model(tensor)

net_strc = make_dot(net, params = dict(list(model.named_parameters()) + [('tensor',tensor)]))
net_strc.view()

网络结构如图:
在这里插入图片描述


二、数据集构建与网络训练

1.数据集构建

这里使用了sklearn提供的fetch_california_housing数据集,该数据集输入参量为8,与网络第一层输入对应。
通过sklearn提供的StandardScalertrain_test_split函数,对输入数据进行正则化与数据集分割。

def dataset():
    house_data = fetch_california_housing()
    x_train,
  • 10
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
### 回答1: 下面是一个输入层为10的两层神经网络Python实现示例: ```python import numpy as np # 定义激活函数 def sigmoid(x): return 1 / (1 + np.exp(-x)) # 定义输入 x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) # 定义权重和偏置 w1 = np.random.randn(10, 5) # 输入层到隐藏层的权重 b1 = np.random.randn(5) # 输入层到隐藏层的偏置 w2 = np.random.randn(5, 1) # 隐藏层到输出层的权重 b2 = np.random.randn(1) # 隐藏层到输出层的偏置 # 前向传播 h = sigmoid(np.dot(x, w1) + b1) # 隐藏层输出 y = sigmoid(np.dot(h, w2) + b2) # 输出层输出 print(y) ``` 在这个示例中,我们使用了sigmoid函数作为激活函数,使用随机生成的权重和偏置进行前向传播,最终输出了一个标量。你可以根据自己的需求修改神经网络的层数、激活函数和输入输出等参数。 ### 回答2: 要实现一个输入层为10的多层感知机(Multilayer Perceptron,MLP)可以使用Python编程语言。Python有许多深度学习库可以使用,如Keras和PyTorch等。 以下是使用Keras库实现的伪代码: 1. 导入所需的库和模块 ```python from keras.models import Sequential from keras.layers import Dense ``` 2. 创建一个Sequential模型 ```python model = Sequential() ``` 3. 添加第一个隐藏层 ```python model.add(Dense(units=50, activation='relu', input_dim=10)) ``` 这里的units参数指定了隐藏层的神经元数目,activation参数指定了激活函数,input_dim参数指定了输入层的维度。 4. 添加更多的隐藏层 ```python model.add(Dense(units=30, activation='relu')) ``` 根据需要,可以添加更多的隐藏层,使用相同的units和activation参数。 5. 添加输出层 ```python model.add(Dense(units=1, activation='sigmoid')) ``` 这里的units参数指定了输出层的神经元数目,activation参数指定了激活函数。 6. 编译模型 ```python model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) ``` 可以根据需要选择不同的损失函数、优化器和评估指标。 7. 训练模型 ```python model.fit(X_train, y_train, epochs=10, batch_size=32) ``` 这里的X_train和y_train是训练集的输入和输出数据,epochs参数指定了训练的轮数,batch_size参数指定了每个批次的样本数。 8. 评估模型 ```python loss, accuracy = model.evaluate(X_test, y_test) ``` 这里的X_test和y_test是测试集的输入和输出数据。 以上就是使用Python实现一个输入层为10的多层感知机的基本步骤。根据具体问题和需求,可以进行更多的调整和改进。 ### 回答3: 多层感知机(Multi-Layer Perceptron, MLP)是一种常见的人工神经网络模型,可以用于分类、回归等任务。Python提供了多种库可以实现多层感知机,如TensorFlow、Keras等。以下是使用Keras库实现一个输入层为10的多层感知机的代码: ```python import numpy as np from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense # 生成随机的训练数据 np.random.seed(0) X = np.random.rand(100, 10) y = np.random.randint(2, size=(100, 1)) # 创建多层感知机模型 model = Sequential() model.add(Dense(64, input_dim=10, activation='relu')) # 输入层与第一隐藏层 model.add(Dense(64, activation='relu')) # 第一隐藏层与第二隐藏层 model.add(Dense(1, activation='sigmoid')) # 输出层 # 编译和训练模型 model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(X, y, epochs=10, batch_size=10) # 使用模型进行预测 predict_X = np.random.rand(10, 10) predictions = model.predict(predict_X) # 打印预测结果 print(predictions) ``` 以上代码首先导入所需的库,然后随机生成100个样本的训练数据,每个样本有10个特征。接着创建一个Sequential模型,并添加三个全连接层,其中第一层与输入层连接,第二层与第一层连接,最后一层为输出层。模型编译时设置损失函数、优化器和评估指标。通过调用`fit`函数对模型进行训练训练10个epoch,并使用batch_size为10。最后,随机生成10个样本用于预测,并输出预测结果。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值