我的解决方案
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)