训练神经网络以区分偶数和奇数


14

问题:是否有可能仅使用数字本身作为输入来训练NN来区分奇数和偶数?

我有以下数据集:

Number Target
1      0
2      1
3      0
4      1
5      0
6      1
...   ...
99     0
100    1

我使用一种非常简单的遗传算法训练了一个带有两个输入神经元(一个是变量Number,另一个是偏向神经元),隐藏层中的9个神经元和一个输出神经元的NN:在每个时期,两组权重“互相对抗;错误率最高的人将输掉,并由获胜者的修改版本代替。

该脚本可以轻松解决诸如AND,OR和XOR运算符之类的简单问题,但是在尝试对奇数和偶数进行分类时会遇到困难。目前,最好的方法是从100个数字中识别出53个数字,这花费了几个小时。我是否将输入归一化似乎没有什么区别。

如果我想作弊,我可以对数据进行预处理,并将%2作为输入提供给NN,但我不想这样做。NN应该能够近似所有函数,包括模运算符(我相信)。我究竟做错了什么?


1
似乎您正在尝试使用神经网络近似“ mod”函数。这是我最喜欢的问题类别之一-“何时将鸡近似为球形是正确的事情”。有限元模型是一个很好的选择。当询问神经网络时,我喜欢以“基础”来思考。我们知道确切的答案包含2除法和截断,而经典网络是矢量乘法和S形函数。NN最适合用于内插,而不是外推-那么您的域有界吗?
EngrStudent-恢复莫妮卡2015年

4
我认为您的问题比当前接受的答案更深入。考虑以下概括:构建一个神经网络(仅使用可以在大脑中发生的操作),该神经网络将计算n mod k,其中n和k是其输入。我想知道使用固定大小的前馈网络是否可行。
user66081 '16

Answers:


7

与任何机器学习任务一样,输入的表示形式对学习和推广效果起着至关重要的作用。

我认为,表示形式的问题在于,函数(模数)是高度非线性的,并且在为该问题选择的输入表示形式中不平滑。

我会尝试以下方法:

  1. 尝试更好的学习算法(反向传播/梯度下降及其变体)。

  2. 尝试使用固定的长度精度以二进制形式表示数字。

  3. [0,2b1]

  4. 完成后,使用多层网络(首先尝试2层:即在使用更多层之前先隐藏+输出)。

  5. 使用单独的培训和测试集。不要在训练集上评估您的表现。


我当时认为对输入进行转换(例如计算自然对数)可能很有价值。
EngrStudent-恢复莫妮卡2015年

它可能。实际上,知道这里的答案(模2只是最后一位),原始数字的二进制表示将非常有效。只需将输入的最后一位连接到输出即可。:)看看模(非2的幂)在神经网络中是否能很好地工作将很有趣。它可能无法正常工作。
Vimal 2015年

嗨@Vimal,谢谢您的回答。您知道用二进制表示输入始终是个好主意还是在这种情况下碰巧有用?
Edgar Derby 2015年

@AnnoysParrot-没有“银色子弹”。没有单一的通用最佳表示,因为最佳可以表示不同且互斥的事物。在这种情况下,二进制表示很有用,但是有很多地方没有用。考虑对视觉数据进行深度学习。如果每个唯一输入位都有一个单独的输入神经元,那么一个5百万像素的图像大约需要256 * 520万个输入。
EngrStudent-恢复莫妮卡2015年

2
在这里同意@EngrStudent。在设计合适的输入表示形式以及神经网络拓扑本身方面,有许多先验知识。由于神经网络大致相当于数字电路的连续,可微分等价物,因此您可以利用来自数字电路的启发来进行加法/乘法/除法/模/等操作,从而适应网络的拓扑。这种先验的拓扑结构(而不​​是完全连接的层)可以导致更快的训练,更好的概括性,等等,就像卷积网络如何有效地处理自然图像。
Vimal

6

学会对奇数和偶数进行分类是一个难题。一个简单的模式会不断重复无限。2,4,6,8 ..... 1,3,5,7 .....

诸如sin(x)和cos(x)之类的非线性激活函数的行为类似。因此,如果您更改神经元以实现正弦和余弦,而不是使用诸如tanh或relu之类的流行激活功能,我想您可以使用单个神经元轻松解决此问题。

线性变换总是先于非线性变换。因此,单个神经元最终将学习sin(ax + b),对于a和b的正确组合,它将以我们想要的所需频率(在这种情况下为1)交替输出0和1。

我以前从未在神经网络中尝试过正弦或余弦。因此,道歉如果不是一个好主意。


5

因此,我现在正在使用神经网络,但遇到了与您相同的问题。我最终要做的是将输入数字表示为一个数组,其值等于数字的二进制表示形式。由于我们正在进行分类,因此我将输出表示为数组,而不是单个值。例如:

input = [
  [0, 0, 0, 1], // 1
  [0, 0, 1, 0], // 2
  [0, 0, 1, 1], // 3
  [0, 1, 0, 0]  // 4
]
output = [
  [1, 0], // odd
  [0, 1], // even
  [1, 0], // odd
  [0, 1]  // even
]

希望这可以帮助!


1
正是基于您的回答,我在此处stackoverflow.com/questions/53671491/…中
prosti,

高超!这说明了数据表示对于任何ML算法如何重要。当我使用十进制表示法时,我的准确度仅为50%,但是按照这个想法,即使在看不见的数据上,我也具有100%的准确度。谢谢。下面是执行:colab.research.google.com/drive/...
Kaushal28

2
在二进制中,偶数始终以0结尾,奇数始终以1结尾。该模型起作用并不奇怪,因为该模型很可能刚刚学会吐出最后一位的值。
Syncrossus

2

我到这里是在遇到类似问题的斗争。所以我写我所管理的。

据我所知,感知器层可以解决所有问题,最终可以简化为使用直线将对象划分为任何几何形状。这就是这种问题。如果在纸上绘制二进制表示的最后一位,则也可以画线,所有奇数都在一侧,偶数在另一侧。出于同样的原因,不可能用一层网络解决异或问题。

好。这个问题看起来很简单,所以让我们以Heaviside步骤作为激活函数。在玩了一些数字之后,我意识到这里的问题是偏见。我在Google上搜索了一下,发现如果保持几何图形表示,则可以使用bias更改坐标系中的激活位置。

很有教育意义的问题


1

众所周知,逻辑门NOT,AND,OR都可以通过非常简单的神经网络(NN)来完成,并且您可以使用二进制数作为输入来构建具有逻辑门的完整算术计算器。因此,对于以基数2表示的任何n和k数字,您应该能够创建一个NN以计算n模k。

如果要为固定的k个数字(例如k = 4)计算n个模k,则实际上可以创建一个非常简单的NN,该NN可以做到:以基k表示输入数字n,并忽略除最低位以外的所有数字。数字,您就会找到答案!


0

避免在输入中使用显式“ mod 2”的一种想法可能是将数字编码为像素序列,然后问题就在于认识到该段是否可以分为两个相等的段。这是一个机器视觉问题,可以通过常规网络来学习。

另一方面,如果将数字存储为浮点数,则该问题会减少(或泛化)以识别浮点数何时近似为整数。


有趣的想法。您能详细说明一下如何将数字编码为像素吗?
Jan Kukacka '18

好吧,想想“基础1”。要编码n,请绘制一个具有n个像素的黑条。我的猜测是,卷积核将注意到奇数和偶数像素之间的差异。
arivero '18

0

我在这里创建了这样的网络。

@William Gottschalk提供的表示形式是基础。

它仅在具有32个输入的第一个隐藏层中使用1个神经元。输出层只有2个神经元,用于0和1的一键编码。


0

我的解决方案

import numpy as np


def layer_1_z(x, w1, b1):
    return 1 / w1 * x + b1


def layer_2(x, w1, b1, w2, b2):
    y1 = layer_1_z(x, w1, b1)
    y2 = y1 - np.floor(y1)
    return w2 * y2 + b2


def layer_2_activation(x, w1, b1, w2, b2):
    y2 = layer_2(x, w1, b1, w2, b2)
    # return 1 / (1 + np.exp(-y2))
    return (y2 > 0) * 1


def loss(param):
    w1, b1, w2, b2 = param
    x = np.arange(0, 1000, 1)
    y_hat = layer_2_activation(x, w1, b1, w2, b2)
    y_true = (x % 2 > 0) * 1
    return sum(np.square(y_hat - y_true))


# %%

from sko.GA import GA

ga = GA(func=loss, n_dim=4, size_pop=50, max_iter=100, lb=[1, 0, 1, 0], ub=[32, 1, 2, 1], precision=1)
best_x, best_y = ga.run()
print('best_x:', best_x, '\n', 'best_y:', best_y)

for x in range(1001, 1200):
    y_hat = layer_2_activation(x, *best_x)
    print('input:{},divide by 2:{}'.format(x, y_hat == 0))

输入:1001,除以2:错误输入:1002,除以2:正确输入:1003,除以2:错误输入:1004,除以2:真实输入:1005,除以2:错误输入:1006,除除以2:真输入:1007,除以2:假输入:1008,除以2:真输入:1009,除以2:假输入:1010,除以2:真输入:1011,除以2:假输入:1012,除以2:True输入:1013,除以2:False输入:1014,除以2:True输入:1015,除以2:False输入:1016,除以2:True输入:1017,除以2:错误输入:1018,除以2:正确输入:1019,除以2:错误输入:1020,除以2:正确输入:1021,除以2:错误输入:1022,除以2:正确输入: 1023,除以2:False输入:1024,除以2:True输入:1025,除以2:False输入:1026,除以2:True输入:1027,除以2:False输入:1028,除以2 :真实输入:1029,除以2:错误输入:1030,除以2:正确输入:1031,除以2:错误输入:1032,除以2:正确输入:1033,除以2:错误输入:1034,除以2:正确输入:1035,除以2:错误输入:1036,除以2:正确输入:1037,除以2:错误输入:1038,除以2:正确输入:1039,除以2:错误输入:1040,除以2:True输入:1041,除以2:错误输入:1042,除以2:正确输入:1043,除以2:错误输入:1044,除以2:真实输入:1045,除以2:错误输入:1046,除除以2:真输入:1047,除以2:假输入:1048,除以2:真输入:1049,除以2:假输入:1050,除以2:真输入:1051,除以2:假输入:1052,除以2:真输入:1053,除以2:假输入:1054,除以2:真输入:1055,除以2:假输入:1056,除以2:真输入:1057,除以2:错误的输入:1058,除以2:正确输入:1059,除以2:错误输入:1060,除以2:正确输入:1061,除以2:错误输入:1062,除以2:正确输入:1063,除以2:错误输入:1064,除以2:True输入:1065,除以2:False输入:1066,除以2:True输入:1067,除以2:False输入:1068,除以2:True输入:1069,除以2:False输入:1070,除以2:真输入:1071,除以2:假输入:1072,除以2:真输入:1073,除以2:假输入:1074,除以2:真输入:1075,除除以2:不正确输入:1076,除以2:不正确输入:1077,除以2:不正确输入:1078,除以2:正确输入:1079,除以2:不正确输入:1080,除以2:正确输入:1081,除以2:错误输入:1082,除以2:正确输入:1083,除以2:错误输入:1084,除以2:正确输入:1085,除以2:错误输入:1086,除以2:真实输入:1087,除以2:假输入:1088,除以2:真输入:1089,除以2:假输入:1090,除以2:真输入:1091,除以2:假输入:1092,除以2:真输入:1093,除以2:错误输入:1094,除以2:正确输入:1095,除以2:错误输入:1096,除以2:正确输入:1097,除以2:错误输入:1098,除以2:True输入:1099,除以2:错误的输入:1100,除以2:正确的输入:1101,除以2:错误的输入:1102,除以2:正确的输入:1103,除以2:错误的输入:1104,除以除以2:真输入:1105,除以2:假输入:1106,除以2:真输入:1107,除以2:假输入:1108,除​​以2:真输入:1109,除以2:假输入:1110,除以2:真输入:1111,除以2:假输入:1112,除以2:真输入:1113,除以2:假输入:1114,除以2:真输入:1115,除以2:错误的输入:1116,除以2:正确输入:1117,除以2:错误输入:1118,除以2:真实输入:1119,除以2:错误输入:1120,除以2:真实输入:1121,除以2:错误输入:1122,除以2:True输入:1123,除以2:False输入:1124,除以2:True输入:1125,除以2:False输入:1126,除以2:True输入:1127,除以2:False输入:1128,除以2:真输入:1129,除以2:假输入:1130,除以2:真输入:1131,除以2:假输入:1132,除以2:真输入:1133,除除以2:不正确的输入:1134,除以2:不正确的输入:1135,除以2:不正确的输入:1136,除以2:不正确的输入:1137,除以2:不正确的输入:1138,除以2:正确的输入:1139,除以2:错误输入:1140,除以2:正确输入:1141,除以2:错误输入:1142,除以2:正确输入:1143,除以2:错误输入:1144,除以2:真实输入:1145,除以2:错误的输入:1146,除以2:正确的输入:1147,除以2:错误的输入:1148,除以2:正确的输入:1149,除以2:错误的输入:1150,除以2:正确的输入:1151,除以2:错误输入:1152,除以2:正确输入:1153,除以2:错误输入:1154,除以2:正确输入:1155,除以2:错误输入:1156,除以2:True输入:1157,除以2:错误输入:1158,除以2:正确输入:1159,除以2:错误输入:1160,除以2:真实输入:1161,除以2:错误输入:1162,除除以2:真输入:1163,除以2:假输入:1164,除以2:真输入:1165,除以2:假输入:1166,除以2:真输入:1167,除以2:假输入:1168,除以2:True输入:1169,除以2:False输入:1170,除以2:True输入:1171,除以2:False输入:1172,除以2:True输入:1173,除以2:错误的输入:1174,除以2:正确输入:1175,除以2:错误输入:1176,除以2:正确输入:1177,除以2:错误输入:1178,除以2:真实输入:1179,除以2:错误输入:1180,除以2:真输入:1181,除以2:假输入:1182,除以2:真输入:1183,除以2:假输入:1184,除以2:真输入:1185,除以2:假输入:1186,除以2:真输入:1187,除以2:假输入:1188,除以2:真输入:1189,除以2:假输入:1190,除以2:真输入:1191,除除以2:不正确的输入:1192,除以2:不正确的输入:1193,除以2:不正确的输入:1194,除以2:不正确的输入:1195,除以2:不正确的输入:1196,除以2:正确的输入:1197,除以2:False输入:1198,除以2:True输入:1199,除以2:False正确输入:1179,除以2:错误输入:1180,除以2:正确输入:1181,除以2:错误输入:1182,除以2:正确输入:1183,除以2:错误输入:1184,除以2:真输入:1185,除以2:假输入:1186,除以2:真输入:1187,除以2:假输入:1188,除以2:真输入:1189,除以2:假输入:1190,除以2:真输入:1191,除以2:假输入:1192,除以2:真输入:1193,除以2:假输入:1194,除以2:真输入:1195,除除以2:不正确的输入:1196,除以2:不正确的输入:1197,除以2:不正确的输入:1198,除以2:不正确的输入:1199,除以2:错误正确输入:1179,除以2:错误输入:1180,除以2:正确输入:1181,除以2:错误输入:1182,除以2:正确输入:1183,除以2:错误输入:1184,除以2:真输入:1185,除以2:假输入:1186,除以2:真输入:1187,除以2:假输入:1188,除以2:真输入:1189,除以2:假输入:1190,除以2:真输入:1191,除以2:假输入:1192,除以2:真输入:1193,除以2:假输入:1194,除以2:真输入:1195,除除以2:错误输入:1196,除以2:真实输入:1197,除以2:错误输入:1198,除以2:真实输入:1199,除以2:False正确输入:1187,除以2:错误输入:1188,除以2:正确输入:1189,除以2:错误输入:1190,除以2:正确输入:1191,除以2:错误输入:1192,除以2:True输入:1193,除以2:False输入:1194,除以2:True输入:1195,除以2:False输入:1196,除以2:True输入:1197,除以2:False输入:1198,除以2:真输入:1199,除以2:假正确输入:1187,除以2:错误输入:1188,除以2:正确输入:1189,除以2:错误输入:1190,除以2:正确输入:1191,除以2:错误输入:1192,除以2:True输入:1193,除以2:False输入:1194,除以2:True输入:1195,除以2:False输入:1196,除以2:True输入:1197,除以2:False输入:1198,除以2:真输入:1199,除以2:假


此外,除以其他数字(例如7)也可以:

import numpy as np


def layer_1_z(x, w1, b1):
    return 1 / w1 * x + b1


def layer_2(x, w1, b1, w2, b2):
    y1 = layer_1_z(x, w1, b1)
    y2 = y1 - np.floor(y1)
    return w2 * y2 + b2


def layer_2_activation(x, w1, b1, w2, b2):
    y2 = layer_2(x, w1, b1, w2, b2)
    # return 1 / (1 + np.exp(-y2))
    return (y2 > 0) * 1


def loss(param):
    w1, b1, w2, b2 = param
    x = np.arange(0, 1000, 1)
    y_hat = layer_2_activation(x, w1, b1, w2, b2)
    y_true = (x % 7 > 0) * 1
    return sum(np.square(y_hat - y_true))


# %%

from sko.GA import GA

ga = GA(func=loss, n_dim=4, size_pop=50, max_iter=100, lb=[1, 0, 1, 0], ub=[32, 1, 2, 1], precision=1)
best_x, best_y = ga.run()
print('best_x:', best_x, '\n', 'best_y:', best_y)

for x in range(1001, 1200):
    y_hat = layer_2_activation(x, *best_x)
    print('input:{},divide by 7:{}'.format(x, y_hat == 0))

输入:1001,除以7:正确输入:1002,除以7:错误输入:1003,除以7:错误输入:1004,除以7:错误输入:1005,除以7:错误输入:1006,除除以7:错误输入:1007,除以7:错误输入:1008,除以7:正确输入:1009,除以7:错误输入:1010,除以7:错误输入:1011,除以7:错误输入:1012,除以7:错误输入:1013,除以7:错误输入:1014,除以7:错误输入:1015,除以7:正确输入:1016,除以7:错误输入:1017,除以7:错误输入:1018,除以7:错误输入:1019,除以7:错误输入:1020,除以7:错误输入:1021,除以7:错误输入:1022,除以7:正确输入: 1023,除以7:错误输入:1024,除以7:错误输入:1025,除以7:错误输入:1026,除以7:错误输入:1027,除以7:错误输入:1028,除以7 :错误的输入:1029,除以7:正确输入:1030,除以7:错误输入:1031,除以7:错误输入:1032,除以7:错误输入:1033,除以7:错误输入:1034,除以7:错误输入:1035,除以7:错误输入:1036,除以7:正确输入:1037,除以7:错误输入:1038,除以7:错误输入:1039,除以7:错误输入:1040,除以7:False输入:1041,除以7:错误输入:1042,除以7:错误输入:1043,除以7:正确输入:1044,除以7:错误输入:1045,除以7:错误输入:1046,除除以7:错误的输入:1047,除以7:错误的输入:1048,除以7:错误的输入:1049,除以7:错误的输入:1050,除以7:正确的输入:1051,除以7:错误的输入:1052,除以7:错误输入:1053,除以7:错误输入:1054,除以7:错误输入:1055,除以7:错误输入:1056,除以7:错误输入:1057,除以7:真输入:1058,除以7:错误输入:1059,除以7:错误输入:1060,除以7:错误输入:1061,除以7:错误输入:1062,除以7:错误输入:1063,除以7:False输入:1064,除以7:正确的输入:1065,除以7:错误的输入:1066,除以7:错误的输入:1067,除以7:错误的输入:1068,除以7:错误的输入:1069,除以除以7:错误输入:1070,除以7:错误输入:1071,除以7:正确输入:1072,除以7:错误输入:1073,除以7:错误输入:1074,除以7:错误输入:1075,除以7:错误输入:1076,除以7:错误输入:1077,除以7:错误输入:1078,除以7:正确输入:1079,除以7:错误输入:1080,除以7:错误输入:1081,除以7:错误输入:1082,除以7:错误输入:1083,除以7:错误输入:1084,除以7:错误输入:1085,除以7:正确输入: 1086,除以7:错误输入:1087,除以7:错误输入:1088,除以7:错误输入:1089,除以7:错误输入:1090,除以7:错误输入:1091,除以7:错误输入:1092,除以7:真输入:1093,除以7:假输入:1094,除以7:假输入:1095,除以7:假输入:1096,除以7:假输入:1097,除以7:假输入:1098,除以7:错误的输入:1099,除以7:正确的输入:1100,除以7:错误的输入:1101,除以7:错误的输入:1102,除以7:错误的输入:1103,除以除以7:错误输入:1104,除以7:错误输入:1105,除以7:错误输入:1106,除以7:正确输入:1107,除以7:错误输入:1108,除​​以7:错误输入:1109,除以7:错误输入:1110,除以7:错误输入:1111,除以7:错误输入:1112,除以7:错误输入:1113,除以7:正确输入:1114,除以7:错误输入:1115,除以7:错误输入:1116,除以7:错误输入:1117,除以7:错误输入:1118,除以7:错误输入:1119,除以7:错误输入:1120,除以7:真输入:1121,除以7:错误的输入:1122,除以7:错误的输入:1123,除以7:错误的输入:1124,除以7:错误的输入:1125,除以7:错误的输入:1126,除以除以7:错误输入:1127,除以7:正确输入:1128,除以7:错误输入:1129,除以7:错误输入:1130,除以7:错误输入:1131,除以7:错误输入:1132,除以7:错误的输入:1133,除以7:错误的输入:1134,除以7:正确的输入:1135,除以7:错误的输入:1136,除以7:错误的输入:1137,除以7:错误输入:1138,除以7:错误输入:1139,除以7:错误输入:1140,除以7:错误输入:1141,除以7:正确输入:1142,除以7:错误输入: 1143,除以7:错误的输入:1144,除以7:错误输入:1145,除以7:错误输入:1146,除以7:错误输入:1147,除以7:错误输入:1148,除以7:正确输入:1149,除以7 :错误输入:1150,除以7:错误输入:1151,除以7:错误输入:1152,除以7:错误输入:1153,除以7:错误输入:1154,除以7:错误输入:1155 ,除以7:正确输入:1156,除以7:错误输入:1157,除以7:错误输入:1158,除以7:错误输入:1159,除以7:错误输入:1160,除以7:错误输入:1161,除以7:错误输入:1162,除以7:正确输入:1163,除以7:错误输入:1164,除以7:错误输入:1165,除以7:错误输入:1166,除以7:错误输入:1167,除以7:错误输入:1168,除以7:错误输入:1169,除以7:正确输入:1170,除以7:错误输入:1171,除以7:False输入:1172,除以7:错误的输入:1173,除以7:错误的输入:1174,除以7:错误的输入:1175,除以7:错误的输入:1176,除以7:正确的输入:1177,除以7:错误的输入:1178,除以7:错误输入:1179,除以7:错误输入:1180,除以7:错误输入:1181,除以7:错误输入:1182,除以7:错误输入:1183,除以7:真输入:1184,除以7:错误的输入:1185,除以7:错误的输入:1186,除以7:错误的输入:1187,除以7:错误的输入:1188,除以7:错误的输入:1189,除以除以7:错误输入:1190,除以7:正确输入:1191,除以7:错误输入:1192,除以7:错误输入:1193,除以7:错误输入:1194,除以7:错误输入:1195,除以7:假输入:1196,除以7:假输入:1197,除以7:真输入:1198,除以7:假输入:1199,除以7:假除以7:错误输入:1175,除以7:错误输入:1176,除以7:正确输入:1177,除以7:错误输入:1178,除以7:错误输入:1179,除以7:False输入:1180,除以7:错误的输入:1181,除以7:错误的输入:1182,除以7:错误的输入:1183,除以7:正确的输入:1184,除以7:错误的输入:1185,除除以7:错误的输入:1186,除以7:错误的输入:1187,除以7:错误的输入:1188,除以7:错误的输入:1189,除以7:错误的输入:1190,除以7:正确的输入:1191,除以7:错误的输入:1192,除以7:错误的输入:1193,除以7:错误的输入:1194,除以7:错误的输入:1195,除以7:错误的输入:1196,除以7:错误的输入:1197,除以7:正确的输入:1198,除以7:错误的输入:1199,除以7:错误除以7:错误输入:1175,除以7:错误输入:1176,除以7:正确输入:1177,除以7:错误输入:1178,除以7:错误输入:1179,除以7:False输入:1180,除以7:错误的输入:1181,除以7:错误的输入:1182,除以7:错误的输入:1183,除以7:正确的输入:1184,除以7:错误的输入:1185,除除以7:错误的输入:1186,除以7:错误的输入:1187,除以7:错误的输入:1188,除以7:错误的输入:1189,除以7:错误的输入:1190,除以7:正确的输入:1191,除以7:错误的输入:1192,除以7:错误的输入:1193,除以7:错误的输入:1194,除以7:错误的输入:1195,除以7:错误的输入:1196,除以7:错误的输入:1197,除以7:正确的输入:1198,除以7:错误的输入:1199,除以7:错误错误输入:1178,除以7:错误输入:1179,除以7:错误输入:1180,除以7:错误输入:1181,除以7:错误输入:1182,除以7:错误输入:1183,除以7:真输入:1184,除以7:假输入:1185,除以7:假输入:1186,除以7:假输入:1187,除以7:假输入:1188,除以7:假输入:1189,除以7:错误的输入:1190,除以7:正确的输入:1191,除以7:错误的输入:1192,除以7:错误的输入:1193,除以7:错误的输入:1194,除以除以7:错误输入:1195,除以7:错误输入:1196,除以7:错误输入:1197,除以7:正确输入:1198,除以7:错误输入:1199,除以7:False错误输入:1178,除以7:错误输入:1179,除以7:错误输入:1180,除以7:错误输入:1181,除以7:错误输入:1182,除以7:错误输入:1183,除以7:真输入:1184,除以7:假输入:1185,除以7:假输入:1186,除以7:假输入:1187,除以7:假输入:1188,除以7:假输入:1189,除以7:错误的输入:1190,除以7:正确的输入:1191,除以7:错误的输入:1192,除以7:错误的输入:1193,除以7:错误的输入:1194,除以除以7:错误输入:1195,除以7:错误输入:1196,除以7:错误输入:1197,除以7:正确输入:1198,除以7:错误输入:1199,除以7:False除以7:错误输入:1185,除以7:错误输入:1186,除以7:错误输入:1187,除以7:错误输入:1188,除以7:错误输入:1189,除以7:False输入:1190,除以7:真输入:1191,除以7:假输入:1192,除以7:假输入:1193,除以7:假输入:1194,除以7:假输入:1195,除除以7:错误输入:1196,除以7:错误输入:1197,除以7:正确输入:1198,除以7:错误输入:1199,除以7:False除以7:错误输入:1185,除以7:错误输入:1186,除以7:错误输入:1187,除以7:错误输入:1188,除以7:错误输入:1189,除以7:False输入:1190,除以7:真输入:1191,除以7:假输入:1192,除以7:假输入:1193,除以7:假输入:1194,除以7:假输入:1195,除除以7:错误输入:1196,除以7:错误输入:1197,除以7:正确输入:1198,除以7:错误输入:1199,除以7:False除以7:真输入:1198,除以7:假输入:1199,除以7:假除以7:真输入:1198,除以7:假输入:1199,除以7:假


说明:

我有2种不同的解决方案。它们都很好:
1.犯罪作为激活
2.地板(或整数)作为激活

使用梯度下降无法找到最佳权重,我使用遗传算法(来自scikit-opt


嗨,大家好,欢迎来到简历,谢谢您的详细回答。您能为您编写的代码添加一些解释吗?
Ferdi

我有2个好的解决方案,在这里看到,1.以sin作为激活2.以floor(或int)作为激活
guofei9987
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.