如何用神经网络判断给定整数数组中的最大值(整活+torch简易教程)

我们学校用().max犯法,没办法只好用神经网络来尝试实现(bushi)
其实主要目的还是简单做一个torch的神经网络的简单步骤介绍,我是感觉比Pytorch官网的tutorial简洁明了多了。。。

灵感来源知乎,a = [2,3,9,1,0],找出其中最大的一个数

import numpy as np
import torch
import torch.nn as nn
import torch.utils.data as Data

# 注意到给出的数组长度为5,且最大值不超过10。于是可以以长度为5,最大值为10的参数构建数据集:
array_length = 5
array_upper_limit = 10
num_examples = 1000

# 生成1000组数据的训练集,标签为one-hot向量,在原数组取到最大值时为1,其余时候均为零
features = torch.randint(0, array_upper_limit, (num_examples, array_length))
labels = torch.tensor([[0 if j != torch.max(i) else 1 for j in i] for i in features])

# 读取数据
batch_size = 1
dataset = Data.TensorDataset(features, labels)
data_iter = Data.DataLoader(dataset, batch_size, shuffle=True)


# 定义神经网络
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        # 第1个一维卷积层
        self.conv1 = nn.Conv1d(1, 6, 2)
        # 第2个一维卷积层
        self.conv2 = nn.Conv1d(6, 10, 2)
        # 全连层
        self.linear2 = nn.Linear(10 * (array_length - 2), array_length)

    def forward(self, x):
        x = x.unsqueeze(1)
        x = x.float()
        x = self.conv1(x)
        x = nn.functional.relu(x)
        x = self.conv2(x)
        x = nn.functional.relu(x)
        x = self.linear2(x.view(-1, 10 * (array_length - 2)))
        return x


net = Net()

# 采用交叉熵损失函数
loss = nn.MSELoss()

# 采用随机梯度下降法进行优化,学习率为0.001
optimizer = torch.optim.SGD(net.parameters(), lr=0.001)

# 训练神经网络
num_epochs = 10
for epoch in range(num_epochs):
    train_l_sum, train_acc_sum, n = 0.0, 0.0, 0
    for X, y in data_iter:
        optimizer.zero_grad()

        y_hat = net(X)

        l = loss(y_hat, y.float()).sum()
        l.backward()
        optimizer.step()

        train_l_sum += l.item()
        train_acc_sum += (y_hat.argmax() == y).sum().item()
        n += y.shape[0]
    print(f"epoch {epoch + 1}, loss {train_l_sum:f}")


# 约30秒后训练完毕。让我们把训练好的模型封装成函数:
def torch_maximum(array):
    return array[net(torch.tensor(array).view(-1, 5)).argmax()]


# 测试!
print(torch_maximum([2, 3, 9, 1, 0]))

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
求高人解答有关BP神经网络输入训练时出现最大值和最小值-neiqian lun.xls   正在做毕设,训练样本为表格形式,在不同车速和方向盘转角输入给定下的车轮角速度。有400多个训练样本,训练时出现了输入最大最小之相等的情况; p=[0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190     200 210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360 370 380 0     10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200     210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360 370 380 390 400    0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190    200 210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360 370 380 390    400 410 420 430 440 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140    150 160 170 180 190 200 210 220 230 240 250 260 270 280 290 300 310 320 330 340    350 360 370 380 390 400 410 420 430 440 450 0 10 20 30 40 50 60 70 80    90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270 280    290 300 310 320 330 340 350 360 370 380 390 400 410 420 430 440 450 0 10 20    30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220    230 240 250 260 270 280 290 300 310 320 330 340 350 360 370 380 390 400 410 420    430 440 450 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160    170 180 190 200 210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360    370 380 390 400 410 420 430 440 450 0 10 20 30 40 50 60 70 80 90 100    110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270 280 290 300    310 320 330 340 350 360 370 380 390 400 410 420 430 440 450 0 10 20 30 40    50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240    250 260 270 280 290 300 310 320 330 340 350 360 370 380 390 400 410 420 430 440    450 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180    190 200 210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360 370 380;   15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15     15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 20     20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20     20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20     25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25     25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25     25 25 25 25 25 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30     30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30     30 30 30 30 30 30 30 30 30 30 30 35 35 35 35 35 35 35 35 35     35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35     35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 40 40 40     40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40     40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40     40 40 40 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45     45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45     45 45 45 45 45 45 45 45 45 50 50 50 50 50 50 50 50 50 50 50     50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50     50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 55 55 55 55 55     55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55     55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55     55 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60     60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60]; t=[740.93 738.49 736.11 733.76 731.41 729.01 726.49 723.8 720.86 717.59 713.94 709.81 705.15 699.89 693.98 687.37 679.99 671.79 662.67 652.55    641.37 628.83 614.93 599.54 582.5 563.66 542.85 519.9 494.63 466.87 436.42 403.08 366.64 326.86 283.46 236.15 184.59 128.36 66.968 987.9    984.7 981.43 978.23 975.07 971.91 968.69 965.34 961.78 957.94 953.74 949.11 943.99 938.34 932.12 925.3 917.85 909.7 900.81 891.1 880.48    868.86 856.12 842.15 826.82 810.01 791.61 771.51 749.64 725.89 700.19 672.47 642.61 610.53 576.1 539.16 499.5 456.91 411.17 362.05 309.29      1234.9 1230.9 1226.6 1222.5 1218.4 1214.4 1210.4 1206.3 1202.1 1197.5 1192.7 1187.4 1181.6 1175.3 1168.4 1160.9 1152.8 1144 1134.3 1123.8    1112.3 1099.8 1086 1071.1 1054.7 1036.9 1017.5 996.5 973.81 949.4 923.22 895.22 865.37 833.63 799.93 764.19 726.31 686.17 643.66 598.63    550.96 500.52 447.13 390.51 330.46 1481.9 1477.1 1471.7 1466.4 1461.3 1456.4 1451.5 1446.5 1441.4 1436    1430.2 1423.9 1417 1409.3 1400.9    1391.7 1381.5 1370.3 1358.2 1344.9 1330.5 1314.8 1297.8 1279.3 1259.4 1237.8 1214.7 1189.8 1163.4 1135.3 1105.6 1074.4 1041.6 1007.1 970.93    932.99 893.17 851.37 807.5 761.47 713.18 662.54 609.47 553.88 495.72 434.9 1728.8 1723.2 1716.5 1710 1703.7 1697.7 1691.8 1685.8 1679.6     1672.9 1665.7 1657.7 1648.7 1638.5 1627.1 1614.4 1600.3 1584.9 1567.9 1549.5 1529.5 1508 1484.9 1460 1433.5 1405.3 1375.4 1343.9 1310.8     1276.2 1240.4 1203.2 1164.8 1125.2 1084.3 1042 998.24 952.8 905.55 856.36 805.15 751.88 696.46 638.86 579.01 516.88 1975.8 1969.4 1961.2     1953.1 1945.6 1938.3 1931.2 1923.8 1916.1 1907.6 1898.1 1887.2 1874.7 1860.5 1844.2 1826 1805.5 1783 1758.4 1731.7 1703.1 1672.6 1640.3     1606.1 1570.3 1532.9 1494 1453.7 1412 1369.2 1325.5 1281 1235.8 1190 1143.4 1095.9 1047.4 997.47 946.03 892.87 837.87 780.98 722.17     661.38 598.59 533.76 2222.8 2215.5 2205.5 2195.8 2186.8 2178.2 2169.5 2160.4 2150.5 2139.3 2126.4 2111.3 2093.8 2073.4 2050.1 2023.6 1994     1961.4 1925.9 1888 1847.7 1805.6 1761.7 1716.4 1669.7 1621.9 1573 1523.2 1472.7 1421.8 1370.8 1319.7 1268.6 1217.2 1165.5 1113.2 1060     1005.9 950.4 893.37 834.66 774.2 711.91 647.75 581.79 514.01 2469.8 2461.7 2449.7 2438 2427.4 2417.2  2406.7 2395.3 2382.4 2367.5 2349.8     2329 2304.5 2275.8 2242.8 2205.5 2164.1 2119 2070.8 2019.8 1966.8 1912.1 1856.1 1799.4 1742 1684.2 1626.1 1567.9 1510.2 1453 1396.5     1340.4 1284.7 1229.1 1173.6 1117.6 1061.1 1003.7 945.04 884.96 823.3 759.99 694.98 628.21 559.64 489.36 2716.7 2707.8 2693.5 2679.6 2667.4     2655.4 2642.7 2628.4 2611.6 2591.7 2568 2539.6 2506 2467.1 2422.9 2373.6 2319.8 2262.3 2201.6 2138.6 2073.7 2007.5 1940.4 1872.9 1805.5     1738.3 1671.6 1606 1541.7 1478.9 1417.5 1357.1 1297.5 1238.6 1179.8 1120.9 1061.6 1001.5 940.25 877.67 813.6 748     680.81 611.99 541.5     469.35 2963.7 2953.9 2937.1 2920.7 2906.9 2892.9 2877.5 2859.5 2837.9 2811.9 2780.4 2743.1 2699.8 2650.2 2595 2534.9 2470.9 2403.6 2333.5     2261.2 2187 2111.4 2034.8 1957.7 1880.6 1804.2 1728.5 1654.5 1582.9 1513.9 1447.2 1382.6 1319.4 1257.2 1195.5 1134.1 1072.4 1010.1 946.91]; [pn,minp,maxp,tn,mint,maxt] = premnmx; net=newff,[14,14,1],{'tansig','tansig','purelin'},'trainlm'); net.trainParam.show=5; net.trainParam.epochs=1000; net.trainParam.goal=1e-5; net=init; [net,tr]=train; 源程序如上,求高人告诉该怎么改动。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值