• 大小: 1.53MB
    文件类型: .7z
    金币: 1
    下载: 0 次
    发布日期: 2023-09-02
  • 语言: Python
  • 标签: 神经网络  

资源简介

复旦大学顾晓东老师课程作业代码,python实现:用BP、RBF、SVM实现三个函数拟合;代码包括数据的产生,数据的输入,训练等

资源截图

代码片段和文件信息

import torch
import  numpy as nn
import matplotlib.pyplot as plt
import torch.nn.functional as F
import  numpy as np

epoch = 1000

def train():
    print(‘------      构建数据集      ------‘)
    x = torch.unsqueeze(torch.cat([torch.linspace(-10 -1 50)torch.linspace(-1 -0.01 50)
                                  torch.linspace(0.01 1 50)torch.linspace(1 10 50)]) dim=1)
    #y = np.sin(x)/np.abs(x)
    y = x
    #y1 = y**(-1)
   # y2 = y1**(1/3)

    plt.scatter(x y)
    x = x.cuda()
    y = y.cuda()


   # plt.show()

    print(‘------      搭建网络      ------‘)

    # 使用固定的方式继承并重写 init和forword两个类
    class Net(torch.nn.Module):
        def __init__(self n_feature n_hidden1n_hidden2n_output):
            # 初始网络的内部结构
            super(Net self).__init__()
            self.hidden1 = torch.nn.Linear(n_feature n_hidden1)
            self.hidden2 = torch.nn.Linear(n_hidden1 n_hidden2)
            self.predict = torch.nn.Linear(n_hidden2 n_output)

        def forward(self x):
            # 一次正向行走过程
            x = torch.tanh(self.hidden1(x))
            x = torch.tanh(self.hidden2(x))
            x = self.predict(x)
            return x

    net = Net(n_feature=1 n_hidden1=500n_hidden2=500 n_output=1)
    net = net.cuda()
    print(‘网络结构为:‘ net)

    print(‘------      启动训练      ------‘)
    loss_func = F.mse_loss
    optimizer = torch.optim.SGD(net.parameters() lr=0.001)

    # 使用数据 进行正向训练,并对Variable变量进行反向梯度传播  启动100次训练
    for i in range(epoch):
        # 使用全量数据 进行正向行走
        prediction = net(x)
        loss = loss_func(prediction y)
        optimizer.zero_grad()  # 清除上一梯度
        loss.backward()  # 反向传播计算梯度
        optimizer.step()  # 应用梯度
        if i % 100==0:
            print(‘epoch:[%d/%d]loss:  %.6f‘ % (i epoch loss))
        # 间隔一段,对训练过程进行可视化展示
        if i % 5 == 0:
            plt.cla()
           # x = x.cpu()
           # y = y.cpu()
            plt.scatter(x.cpu() y.cpu())
            plt.plot(x.detach().cpu().numpy() prediction.detach().cpu().numpy() ‘r-‘ lw=5)
            plt.text(0.5 0 ‘Loss=‘ + str(loss.item()) fontdict={‘size‘: 20 ‘color‘: ‘red‘})
            plt.pause(0.1)


    plt.ioff()
    plt.show()





if __name__ == ‘__main__‘:
    train()

评论

共有 条评论