Melatih Jaringan Saraf Tiruan untuk membedakan angka genap dan ganjil

14

Pertanyaan: apakah mungkin untuk melatih NN untuk membedakan antara angka ganjil dan genap hanya menggunakan sebagai input angka itu sendiri?

Saya memiliki dataset berikut:

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

Saya melatih NN dengan dua neuron input (satu menjadi Variabel Number, yang lainnya menjadi neuron bias), sembilan neuron di lapisan tersembunyi dan satu neuron output menggunakan algoritma genetika yang sangat sederhana: pada setiap zaman, dua set bobot "bertarung "terhadap satu sama lain; yang memiliki kesalahan tertinggi hilang dan digantikan oleh versi pemenang yang dimodifikasi.

Script dengan mudah menyelesaikan masalah sederhana seperti AND, operator OR dan XOR tetapi macet ketika mencoba untuk mengkategorikan angka ganjil dan genap. Saat ini yang terbaik yang berhasil dilakukannya adalah mengidentifikasi 53 angka dari 100 dan butuh beberapa jam. Apakah saya menormalkan atau tidak input tampaknya tidak ada bedanya.

Jika saya ingin menyontek saya hanya bisa melakukan pra-proses data dan memberi makan% 2 ke NN sebagai input tetapi saya tidak ingin melakukannya; NN harus bisa mendekati setiap fungsi, termasuk operator modulo (saya percaya ). Apa yang saya lakukan salah?

Edgar Derby
sumber
1
Tampaknya Anda mencoba memperkirakan fungsi "mod" dengan jaringan saraf. Ini adalah salah satu kelas masalah favorit saya - "kapan hal yang tepat untuk memperkirakan seekor ayam sebagai bulatan". Model elemen hingga adalah tempat yang tepat untuk itu. Ketika menanyakan ini dari jaringan saraf, saya suka berpikir dalam istilah "dasar". Kami tahu jawaban pasti berisi pembagian dengan 2, dan pemotongan sementara jaringan klasik adalah fungsi perkalian vektor dan sigmoid. NN's paling baik digunakan untuk interpolasi, bukan ekstrapolasi - jadi apakah domain Anda dibatasi?
EngrStudent
4
Saya pikir pertanyaan Anda lebih dalam dari jawaban yang saat ini diterima. Pertimbangkan generalisasi berikut: membangun jaringan saraf (hanya menggunakan operasi yang dapat diharapkan terjadi di otak) yang akan menghitung n mod k, di mana n dan k adalah inputnya. Saya ingin tahu apakah ini mungkin dengan jaringan feedforward ukuran tetap.
user66081

Jawaban:

7

Seperti halnya tugas pembelajaran mesin, representasi input Anda memainkan peran penting dalam seberapa baik Anda belajar dan menggeneralisasi.

Saya pikir, masalah dengan representasi adalah bahwa fungsi (modulo) sangat tidak linier dan tidak mulus dalam representasi input yang Anda pilih untuk masalah ini.

Saya akan mencoba yang berikut:

  1. Cobalah algoritma pembelajaran yang lebih baik (back-propagation / gradient descent dan variannya).

  2. Cobalah mewakili angka dalam biner menggunakan presisi panjang tetap.

  3. Jika representasi input Anda adalah angka b-bit, saya akan memastikan set pelatihan Anda tidak bias terhadap angka kecil atau besar. Memiliki angka yang seragam, dan dipilih secara acak dari rentang .[0,2b-1]

  4. Seperti yang telah Anda lakukan, gunakan jaringan multi-layer (coba 2 lapisan pertama: yaitu, output + tersembunyi, sebelum menggunakan lebih banyak lapisan).

  5. Gunakan set pelatihan + tes terpisah. Jangan mengevaluasi kinerja Anda pada set pelatihan.

Vimal
sumber
Saya berpikir bahwa melakukan transformasi pada input seperti menghitung logaritma natural mungkin berharga.
EngrStudent
Itu mungkin. Bahkan, mengetahui jawabannya di sini (modulo 2 hanya bit terakhir), representasi biner dari angka mentah akan bekerja dengan sangat baik. Cukup sambungkan sedikit input terakhir ke output. :) Akan menarik untuk melihat apakah modulo (bukan-power-of-2) berfungsi baik dengan jaringan saraf. Mungkin tidak bekerja juga.
Vimal
Hai @Vimal, terima kasih atas jawabannya. Apakah Anda tahu apakah mewakili input dalam biner selalu merupakan ide yang baik atau kebetulan membantu dalam kasus khusus ini?
Edgar Derby
@AnnoysParrot - tidak ada "peluru perak". Tidak ada representasi universal tunggal tunggal karena yang terbaik dapat berarti hal-hal yang berbeda dan saling eksklusif. Representasi biner berguna dalam kasus ini, tetapi ada banyak di mana tidak. Pertimbangkan pembelajaran mendalam tentang data visual. Jika Anda memiliki input neuron terpisah untuk setiap bit input unik, Anda akan membutuhkan sekitar 256 * 5,2 juta input untuk gambar 5 Megapiksel.
EngrStudent
2
Setuju dengan @EngrStudent di sini. Banyak pengetahuan sebelumnya digunakan untuk merancang representasi input yang cocok dan juga topologi jaringan saraf itu sendiri. Karena jaringan saraf kira-kira merupakan rangkaian digital berkelanjutan yang dapat dibedakan, Anda dapat mengadaptasi topologi jaringan menggunakan inspirasi dari sirkuit digital untuk penambahan / perkalian / pembagian / modulo / dll. Ini sebelumnya pada topologi (bukan lapisan yang sepenuhnya terhubung) dapat mengarah pada pelatihan yang lebih cepat, generalisasi yang lebih baik, dll., Seperti bagaimana convnets bekerja dengan baik untuk gambar alami.
Vimal
6

Belajar untuk mengklasifikasikan angka ganjil dan genap adalah masalah yang sulit. Pola sederhana terus berulang tanpa batas. 2,4,6,8 ..... 1,3,5,7 .....

Fungsi aktivasi nonlinear seperti sin (x) dan cos (x) berperilaku serupa. Karena itu, jika Anda mengubah neuron Anda untuk menerapkan dosa dan cos alih-alih fungsi aktivasi populer seperti tanh atau relu, saya kira Anda dapat menyelesaikan masalah ini dengan cukup mudah menggunakan neuron tunggal.

Transformasi linier selalu mendahului transformasi nonlinear. Oleh karena itu satu neuron pada akhirnya akan belajar dosa (ax + b) yang untuk kombinasi yang tepat dari a & b akan menghasilkan 0 dan 1 sebagai alternatif dalam frekuensi yang diinginkan yang kita inginkan dalam kasus ini adalah 1.

Saya belum pernah mencoba dosa atau cos di jaringan saraf saya sebelumnya. Jadi, permintaan maaf jika akhirnya menjadi ide yang sangat buruk.

Vignesh Sk
sumber
5

Jadi saya bekerja dengan jaring saraf sekarang dan saya mengalami masalah yang sama seperti Anda. Apa yang saya akhirnya lakukan adalah merepresentasikan nomor input sebagai array dengan nilai yang sama dengan representasi biner dari angka tersebut. Karena apa yang kita lakukan adalah mengklasifikasikan saya merepresentasikan output saya sebagai array, bukan nilai tunggal. ex:

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
]

Semoga ini membantu!

William Gottschalk
sumber
1
Tepat berdasarkan jawaban Anda, saya membuat model di sini stackoverflow.com/questions/53671491/…
prosti
Hebat! Ini menunjukkan betapa representasi data penting untuk algoritma ML apa pun. Ketika saya menggunakan representasi desimal, saya mendapatkan akurasi 50%, tetapi mengikuti ide ini, saya mendapatkan akurasi 100% bahkan pada data yang tidak terlihat. Terima kasih. Inilah implementasinya: colab.research.google.com/drive/…
Kaushal28
2
Dalam biner, angka genap selalu berakhir dengan 0 dan angka ganjil selalu berakhir dengan 1. Ini tidak mengherankan bahwa model itu bekerja, karena ada kemungkinan bahwa itu hanya belajar untuk meludahkan nilai digit terakhir.
Syncrossus
2

Saya sampai di sini di mana berjuang dengan masalah yang sama. Jadi saya menulis apa yang saya kelola.

Sejauh yang saya tahu satu lapisan perceptron mampu menyelesaikan setiap masalah, yang pada akhirnya dapat disederhanakan untuk membagi objek dalam setiap geometri menggunakan garis lurus. Dan ini adalah masalah seperti ini. Jika Anda menggambar bit terakhir representasi biner di atas kertas, Anda juga dapat menggambar garis, dan semua angka ganjil ada di satu sisi, dan bahkan di sisi lain. Untuk alasan yang sama tidak mungkin untuk menyelesaikan masalah xor dengan jaringan satu lapis.

Baik. Masalah ini terlihat sangat sederhana, jadi mari kita ambil langkah Heaviside sebagai fungsi aktivasi. Setelah saya bermain sedikit dengan nomor saya, saya menyadari bahwa masalah di sini adalah dengan bias. Saya sedikit google, dan apa yang saya temukan adalah bahwa jika Anda tetap dengan representasi geometri, bias memungkinkan Anda untuk mengubah tempat aktivasi dalam sistem koordinat.

Masalah yang sangat mendidik

pengguna3486361
sumber
1

Diketahui bahwa gerbang logika TIDAK, DAN, ATAU semuanya dapat dilakukan dengan jaringan saraf yang sangat sederhana (NN), dan bahwa Anda dapat membangun kalkulator aritmatika lengkap dengan gerbang logika menggunakan angka biner sebagai input. Oleh karena itu Anda harus dapat membuat NN untuk menghitung n modulo k, untuk setiap angka n dan k yang dinyatakan dalam basis 2.

Jika Anda ingin menghitung n modulo k untuk angka k tetap (misalnya k = 4) Anda sebenarnya dapat membuat NN yang sangat sederhana yang melakukan itu: nyatakan angka input n dalam basis k, dan abaikan semua digit selain dari peringkat terendah digit, dan Anda punya jawabannya!

Bernard Montaron
sumber
0

Satu ide yang menghindari penggunaan "mod 2" eksplisit dalam input bisa dengan mengkodifikasikan angka sebagai urutan piksel, maka masalahnya adalah jumlah untuk mengenali jika segmen dapat dibagi menjadi dua segmen yang sama. Ini adalah masalah penglihatan mesin dan itu bisa dipelajari oleh jaringan konvensional.

Di sisi lain, jika nomor disimpan sebagai float, pertanyaannya mengurangi (atau menggeneralisasi) untuk mengenali kapan angka float kira-kira bilangan bulat.

arivero
sumber
Pikiran yang menarik. Bisakah Anda menguraikan bagaimana Anda ingin mengodifikasi angka menjadi piksel?
Jan Kukacka
baik, pikirkan "basis 1". Untuk mengkodifikasikan n, gambarlah bilah hitam yang memiliki n piksel. Dugaan saya adalah bahwa kernel konvolusi akan melihat perbedaan antara jumlah piksel ganjil dan genap.
arivero
0

Saya membuat jaringan seperti itu di sini .

Representasi yang diberikan oleh @William Gottschalk adalah yayasan.

Itu hanya menggunakan 1 neuron di lapisan tersembunyi pertama dengan 32 input. Lapisan keluaran hanya memiliki 2 neuron untuk enkode satu panas 0 dan 1.

prosti
sumber
0

Solusi saya

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))

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


Selain itu, bagi dengan angka lain (katakanlah, 7) juga baik:

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))

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


Penjelasan:

Saya mendapatkan 2 solusi berbeda. Keduanya baik:
1. dosa sebagai aktivasi
2. lantai (atau int) sebagai aktivasi

Tidak mungkin menemukan bobot terbaik menggunakan gradient descent, dan saya menggunakan algoritma genetika (dari scikit-opt )

guofei9987
sumber
Hai Man, selamat datang di CV dan terima kasih atas jawaban terperinci Anda. Bisakah Anda menambahkan penjelasan pada kode yang Anda tulis?
Ferdi
Saya mendapatkan 2 solusi yang baik, lihat di sini , 1. sin sebagai aktivasi 2. lantai (atau int) sebagai aktivasi
guofei9987