diff --git a/real-or-ai-predictions.csv b/real-or-ai-predictions.csv new file mode 100644 index 0000000..9506fde --- /dev/null +++ b/real-or-ai-predictions.csv @@ -0,0 +1,4001 @@ +id,class +0000,real +0001,real +0002,real +0003,real +0004,real +0005,real +0006,real +0007,ai +0008,real +0009,real +0010,real +0011,real +0012,real +0013,real +0014,real +0015,real +0016,real +0017,ai +0018,ai +0019,real +0020,real +0021,real +0022,real +0023,real +0024,real +0025,ai +0026,real +0027,ai +0028,real +0029,real +0030,real +0031,real +0032,real +0033,ai +0034,real +0035,real +0036,ai +0037,real +0038,real +0039,real +0040,real +0041,real +0042,real +0043,real +0044,real +0045,ai +0046,real +0047,real +0048,real +0049,real +0050,real +0051,ai +0052,real +0053,real +0054,real +0055,real +0056,real +0057,real +0058,ai +0059,real +0060,real +0061,real +0062,ai +0063,real +0064,real +0065,real +0066,real +0067,ai +0068,real +0069,real +0070,real +0071,real +0072,real +0073,real +0074,real +0075,real +0076,real +0077,real +0078,real +0079,real +0080,real +0081,real +0082,real +0083,real +0084,real +0085,real +0086,real +0087,real +0088,ai +0089,real +0090,real +0091,real +0092,real +0093,real +0094,real +0095,real +0096,ai +0097,real +0098,real +0099,real +0100,real +0101,real +0102,ai +0103,ai +0104,real +0105,real +0106,real +0107,real +0108,real +0109,real +0110,real +0111,ai +0112,real +0113,real +0114,real +0115,real +0116,real +0117,real +0118,real +0119,real +0120,real +0121,real +0122,real +0123,real +0124,real +0125,ai +0126,real +0127,real +0128,real +0129,real +0130,real +0131,real +0132,real +0133,real +0134,real +0135,ai +0136,real +0137,ai +0138,real +0139,real +0140,real +0141,real +0142,real +0143,real +0144,real +0145,real +0146,real +0147,real +0148,real +0149,real +0150,ai +0151,real +0152,ai +0153,real +0154,real +0155,real +0156,real +0157,real +0158,real +0159,real +0160,real +0161,real +0162,ai +0163,real +0164,real +0165,real +0166,real +0167,real +0168,real +0169,real +0170,real +0171,real +0172,real +0173,real +0174,real +0175,real +0176,ai +0177,real +0178,real +0179,real +0180,real +0181,real +0182,ai +0183,real +0184,real +0185,real +0186,real +0187,ai +0188,real +0189,real +0190,ai +0191,real +0192,real +0193,real +0194,ai +0195,real +0196,real +0197,real +0198,real +0199,ai +0200,real +0201,real +0202,real +0203,real +0204,real +0205,real +0206,ai +0207,real +0208,ai +0209,real +0210,real +0211,ai +0212,real +0213,real +0214,real +0215,real +0216,real +0217,ai +0218,real +0219,real +0220,real +0221,real +0222,real +0223,real +0224,real +0225,real +0226,real +0227,real +0228,real +0229,real +0230,real +0231,real +0232,ai +0233,real +0234,real +0235,real +0236,real +0237,real +0238,real +0239,real +0240,real +0241,ai +0242,real +0243,real +0244,ai +0245,real +0246,real +0247,real +0248,real +0249,real +0250,ai +0251,real +0252,real +0253,ai +0254,real +0255,ai +0256,real +0257,real +0258,real +0259,ai +0260,real +0261,real +0262,real +0263,real +0264,real +0265,real +0266,real +0267,ai +0268,real +0269,real +0270,real +0271,real +0272,ai +0273,ai +0274,real +0275,real +0276,ai +0277,ai +0278,real +0279,real +0280,real +0281,real +0282,ai +0283,real +0284,real +0285,real +0286,real +0287,real +0288,real +0289,real +0290,real +0291,real +0292,real +0293,real +0294,real +0295,real +0296,real +0297,real +0298,real +0299,real +0300,real +0301,real +0302,real +0303,real +0304,real +0305,real +0306,ai +0307,ai +0308,real +0309,real +0310,real +0311,real +0312,real +0313,real +0314,real +0315,real +0316,real +0317,ai +0318,real +0319,real +0320,real +0321,real +0322,real +0323,ai +0324,ai +0325,ai +0326,real +0327,ai +0328,real +0329,ai +0330,real +0331,real +0332,ai +0333,real +0334,real +0335,real +0336,ai +0337,real +0338,real +0339,real +0340,real +0341,ai +0342,real +0343,real +0344,real +0345,real +0346,real +0347,ai +0348,real +0349,real +0350,real +0351,ai +0352,real +0353,real +0354,real +0355,real +0356,ai +0357,real +0358,real +0359,real +0360,ai +0361,real +0362,real +0363,real +0364,real +0365,real +0366,real +0367,real +0368,real +0369,real +0370,real +0371,real +0372,real +0373,ai +0374,real +0375,real +0376,real +0377,real +0378,real +0379,ai +0380,real +0381,real +0382,real +0383,real +0384,ai +0385,real +0386,ai +0387,real +0388,real +0389,real +0390,real +0391,real +0392,ai +0393,real +0394,real +0395,real +0396,real +0397,ai +0398,ai +0399,real +0400,real +0401,real +0402,ai +0403,real +0404,real +0405,real +0406,real +0407,real +0408,real +0409,real +0410,ai +0411,real +0412,real +0413,real +0414,real +0415,real +0416,real +0417,real +0418,real +0419,real +0420,real +0421,real +0422,ai +0423,real +0424,real +0425,real +0426,real +0427,ai +0428,real +0429,real +0430,ai +0431,real +0432,real +0433,real +0434,real +0435,real +0436,real +0437,real +0438,ai +0439,real +0440,real +0441,real +0442,real +0443,ai +0444,real +0445,real +0446,ai +0447,real +0448,real +0449,real +0450,ai +0451,real +0452,real +0453,real +0454,real +0455,real +0456,real +0457,real +0458,real +0459,real +0460,real +0461,ai +0462,ai +0463,real +0464,real +0465,real +0466,real +0467,real +0468,real +0469,real +0470,real +0471,real +0472,real +0473,real +0474,real +0475,ai +0476,real +0477,real +0478,real +0479,real +0480,real +0481,real +0482,real +0483,ai +0484,real +0485,real +0486,ai +0487,real +0488,real +0489,ai +0490,real +0491,real +0492,real +0493,ai +0494,real +0495,real +0496,real +0497,real +0498,ai +0499,real +0500,ai +0501,real +0502,real +0503,real +0504,real +0505,real +0506,real +0507,real +0508,real +0509,real +0510,real +0511,real +0512,real +0513,ai +0514,ai +0515,real +0516,real +0517,real +0518,real +0519,real +0520,ai +0521,real +0522,real +0523,real +0524,real +0525,real +0526,ai +0527,real +0528,real +0529,real +0530,real +0531,real +0532,real +0533,real +0534,real +0535,real +0536,real +0537,real +0538,real +0539,ai +0540,ai +0541,real +0542,real +0543,real +0544,real +0545,ai +0546,ai +0547,real +0548,real +0549,real +0550,real +0551,real +0552,real +0553,ai +0554,real +0555,ai +0556,real +0557,real +0558,real +0559,real +0560,real +0561,real +0562,real +0563,real +0564,real +0565,real +0566,real +0567,real +0568,ai +0569,real +0570,ai +0571,real +0572,real +0573,real +0574,real +0575,real +0576,real +0577,ai +0578,ai +0579,real +0580,real +0581,real +0582,ai +0583,real +0584,ai +0585,real +0586,real +0587,ai +0588,real +0589,real +0590,real +0591,real +0592,real +0593,real +0594,real +0595,real +0596,ai +0597,real +0598,real +0599,real +0600,real +0601,ai +0602,real +0603,ai +0604,ai +0605,real +0606,real +0607,real +0608,real +0609,ai +0610,real +0611,ai +0612,real +0613,ai +0614,real +0615,ai +0616,ai +0617,real +0618,real +0619,real +0620,real +0621,real +0622,real +0623,real +0624,real +0625,real +0626,real +0627,real +0628,real +0629,real +0630,real +0631,real +0632,ai +0633,real +0634,real +0635,real +0636,real +0637,real +0638,real +0639,real +0640,real +0641,ai +0642,real +0643,real +0644,real +0645,real +0646,real +0647,real +0648,real +0649,real +0650,real +0651,real +0652,real +0653,real +0654,real +0655,real +0656,real +0657,real +0658,real +0659,real +0660,real +0661,real +0662,real +0663,real +0664,real +0665,real +0666,real +0667,real +0668,real +0669,real +0670,real +0671,ai +0672,real +0673,real +0674,ai +0675,real +0676,real +0677,real +0678,real +0679,real +0680,real +0681,real +0682,real +0683,ai +0684,real +0685,real +0686,real +0687,real +0688,real +0689,real +0690,real +0691,real +0692,real +0693,real +0694,real +0695,real +0696,real +0697,real +0698,real +0699,real +0700,real +0701,real +0702,ai +0703,real +0704,real +0705,real +0706,real +0707,real +0708,ai +0709,real +0710,real +0711,real +0712,ai +0713,ai +0714,real +0715,real +0716,real +0717,real +0718,real +0719,real +0720,real +0721,real +0722,real +0723,ai +0724,real +0725,real +0726,real +0727,real +0728,real +0729,real +0730,real +0731,real +0732,real +0733,real +0734,real +0735,real +0736,real +0737,ai +0738,real +0739,real +0740,real +0741,real +0742,ai +0743,ai +0744,real +0745,ai +0746,real +0747,real +0748,real +0749,real +0750,ai +0751,real +0752,real +0753,real +0754,ai +0755,ai +0756,real +0757,ai +0758,real +0759,real +0760,ai +0761,real +0762,real +0763,ai +0764,real +0765,real +0766,real +0767,real +0768,real +0769,ai +0770,real +0771,real +0772,real +0773,real +0774,ai +0775,ai +0776,ai +0777,ai +0778,real +0779,real +0780,real +0781,real +0782,real +0783,ai +0784,real +0785,real +0786,ai +0787,real +0788,real +0789,real +0790,real +0791,real +0792,real +0793,real +0794,real +0795,ai +0796,ai +0797,ai +0798,real +0799,real +0800,ai +0801,real +0802,real +0803,ai +0804,real +0805,real +0806,real +0807,real +0808,real +0809,real +0810,real +0811,real +0812,real +0813,real +0814,ai +0815,real +0816,real +0817,real +0818,real +0819,real +0820,ai +0821,ai +0822,real +0823,real +0824,real +0825,ai +0826,real +0827,real +0828,ai +0829,ai +0830,real +0831,real +0832,real +0833,real +0834,ai +0835,real +0836,ai +0837,real +0838,ai +0839,real +0840,real +0841,real +0842,real +0843,real +0844,real +0845,real +0846,real +0847,real +0848,real +0849,real +0850,real +0851,real +0852,ai +0853,real +0854,real +0855,real +0856,real +0857,real +0858,ai +0859,real +0860,real +0861,real +0862,real +0863,real +0864,ai +0865,real +0866,real +0867,real +0868,real +0869,ai +0870,ai +0871,real +0872,real +0873,real +0874,real +0875,real +0876,ai +0877,real +0878,real +0879,real +0880,ai +0881,real +0882,real +0883,real +0884,real +0885,real +0886,real +0887,real +0888,real +0889,ai +0890,ai +0891,real +0892,real +0893,real +0894,real +0895,ai +0896,ai +0897,real +0898,real +0899,real +0900,ai +0901,real +0902,ai +0903,real +0904,real +0905,real +0906,real +0907,real +0908,real +0909,real +0910,real +0911,real +0912,real +0913,real +0914,real +0915,real +0916,real +0917,real +0918,ai +0919,real +0920,real +0921,ai +0922,real +0923,real +0924,ai +0925,real +0926,real +0927,real +0928,real +0929,real +0930,real +0931,ai +0932,ai +0933,real +0934,real +0935,ai +0936,real +0937,ai +0938,real +0939,real +0940,real +0941,real +0942,ai +0943,real +0944,real +0945,real +0946,real +0947,real +0948,real +0949,real +0950,real +0951,ai +0952,real +0953,ai +0954,real +0955,ai +0956,real +0957,real +0958,real +0959,real +0960,real +0961,real +0962,real +0963,real +0964,real +0965,real +0966,real +0967,real +0968,real +0969,real +0970,real +0971,real +0972,real +0973,real +0974,real +0975,real +0976,real +0977,real +0978,ai +0979,real +0980,ai +0981,real +0982,real +0983,real +0984,real +0985,real +0986,real +0987,real +0988,ai +0989,ai +0990,real +0991,ai +0992,real +0993,real +0994,real +0995,real +0996,ai +0997,real +0998,real +0999,real +1000,real +1001,real +1002,real +1003,ai +1004,real +1005,real +1006,real +1007,ai +1008,real +1009,real +1010,real +1011,real +1012,real +1013,ai +1014,real +1015,ai +1016,ai +1017,ai +1018,ai +1019,real +1020,real +1021,real +1022,real +1023,real +1024,real +1025,real +1026,ai +1027,real +1028,real +1029,real +1030,real +1031,real +1032,real +1033,real +1034,ai +1035,real +1036,real +1037,ai +1038,ai +1039,real +1040,real +1041,real +1042,real +1043,real +1044,real +1045,real +1046,real +1047,real +1048,real +1049,real +1050,real +1051,real +1052,real +1053,real +1054,real +1055,real +1056,real +1057,ai +1058,real +1059,real +1060,real +1061,ai +1062,real +1063,real +1064,real +1065,ai +1066,real +1067,real +1068,real +1069,real +1070,real +1071,real +1072,real +1073,real +1074,real +1075,real +1076,real +1077,real +1078,real +1079,real +1080,real +1081,real +1082,real +1083,real +1084,real +1085,ai +1086,real +1087,real +1088,ai +1089,real +1090,real +1091,real +1092,real +1093,real +1094,real +1095,real +1096,real +1097,real +1098,real +1099,real +1100,real +1101,real +1102,real +1103,real +1104,real +1105,real +1106,real +1107,real +1108,real +1109,real +1110,real +1111,real +1112,real +1113,real +1114,real +1115,real +1116,real +1117,real +1118,real +1119,real +1120,real +1121,real +1122,real +1123,real +1124,real +1125,real +1126,ai +1127,real +1128,ai +1129,real +1130,real +1131,real +1132,ai +1133,real +1134,real +1135,real +1136,ai +1137,real +1138,real +1139,ai +1140,real +1141,real +1142,ai +1143,real +1144,real +1145,real +1146,real +1147,ai +1148,real +1149,real +1150,real +1151,real +1152,real +1153,real +1154,real +1155,ai +1156,real +1157,real +1158,real +1159,real +1160,real +1161,ai +1162,real +1163,real +1164,real +1165,real +1166,real +1167,real +1168,real +1169,ai +1170,real +1171,real +1172,real +1173,real +1174,real +1175,real +1176,real +1177,real +1178,real +1179,real +1180,real +1181,real +1182,ai +1183,real +1184,real +1185,real +1186,real +1187,real +1188,real +1189,real +1190,real +1191,real +1192,real +1193,real +1194,real +1195,real +1196,real +1197,real +1198,real +1199,ai +1200,real +1201,real +1202,real +1203,ai +1204,ai +1205,real +1206,real +1207,real +1208,real +1209,real +1210,real +1211,ai +1212,real +1213,real +1214,real +1215,real +1216,real +1217,ai +1218,real +1219,real +1220,real +1221,real +1222,real +1223,ai +1224,real +1225,real +1226,real +1227,real +1228,real +1229,real +1230,real +1231,real +1232,real +1233,real +1234,real +1235,real +1236,real +1237,real +1238,ai +1239,ai +1240,ai +1241,real +1242,real +1243,real +1244,ai +1245,real +1246,real +1247,real +1248,real +1249,real +1250,real +1251,real +1252,real +1253,real +1254,ai +1255,real +1256,real +1257,real +1258,real +1259,real +1260,real +1261,real +1262,real +1263,ai +1264,real +1265,real +1266,ai +1267,ai +1268,real +1269,ai +1270,real +1271,real +1272,real +1273,real +1274,real +1275,real +1276,real +1277,real +1278,real +1279,real +1280,real +1281,ai +1282,real +1283,ai +1284,real +1285,real +1286,real +1287,real +1288,ai +1289,ai +1290,real +1291,real +1292,ai +1293,real +1294,real +1295,ai +1296,real +1297,real +1298,real +1299,real +1300,real +1301,real +1302,ai +1303,real +1304,real +1305,ai +1306,real +1307,ai +1308,real +1309,real +1310,real +1311,ai +1312,real +1313,real +1314,ai +1315,real +1316,real +1317,real +1318,ai +1319,real +1320,real +1321,real +1322,real +1323,real +1324,ai +1325,real +1326,real +1327,real +1328,real +1329,real +1330,real +1331,real +1332,ai +1333,real +1334,real +1335,real +1336,real +1337,ai +1338,real +1339,real +1340,real +1341,real +1342,real +1343,real +1344,real +1345,real +1346,ai +1347,real +1348,real +1349,real +1350,ai +1351,real +1352,real +1353,ai +1354,real +1355,real +1356,ai +1357,real +1358,real +1359,real +1360,real +1361,real +1362,real +1363,real +1364,real +1365,ai +1366,ai +1367,real +1368,real +1369,real +1370,ai +1371,ai +1372,real +1373,real +1374,ai +1375,real +1376,real +1377,real +1378,ai +1379,real +1380,real +1381,ai +1382,ai +1383,real +1384,real +1385,real +1386,real +1387,real +1388,real +1389,ai +1390,real +1391,real +1392,ai +1393,real +1394,real +1395,real +1396,real +1397,ai +1398,real +1399,real +1400,ai +1401,real +1402,real +1403,real +1404,ai +1405,real +1406,real +1407,real +1408,real +1409,real +1410,real +1411,real +1412,real +1413,real +1414,ai +1415,real +1416,real +1417,ai +1418,real +1419,real +1420,real +1421,real +1422,real +1423,real +1424,ai +1425,real +1426,real +1427,real +1428,real +1429,real +1430,real +1431,real +1432,real +1433,real +1434,real +1435,real +1436,real +1437,real +1438,real +1439,real +1440,ai +1441,real +1442,real +1443,real +1444,real +1445,real +1446,real +1447,real +1448,real +1449,ai +1450,real +1451,real +1452,real +1453,real +1454,real +1455,real +1456,ai +1457,real +1458,ai +1459,real +1460,real +1461,ai +1462,ai +1463,ai +1464,real +1465,ai +1466,real +1467,real +1468,real +1469,real +1470,real +1471,real +1472,real +1473,real +1474,real +1475,ai +1476,ai +1477,ai +1478,real +1479,real +1480,real +1481,ai +1482,real +1483,real +1484,real +1485,ai +1486,real +1487,real +1488,real +1489,real +1490,real +1491,real +1492,real +1493,real +1494,ai +1495,real +1496,real +1497,real +1498,real +1499,ai +1500,real +1501,real +1502,real +1503,real +1504,real +1505,ai +1506,real +1507,real +1508,real +1509,real +1510,ai +1511,real +1512,real +1513,real +1514,real +1515,real +1516,real +1517,real +1518,real +1519,ai +1520,real +1521,real +1522,real +1523,real +1524,real +1525,real +1526,ai +1527,real +1528,real +1529,real +1530,real +1531,real +1532,real +1533,real +1534,ai +1535,real +1536,real +1537,real +1538,ai +1539,real +1540,real +1541,real +1542,real +1543,ai +1544,real +1545,real +1546,real +1547,real +1548,real +1549,real +1550,real +1551,ai +1552,real +1553,real +1554,real +1555,real +1556,real +1557,real +1558,real +1559,real +1560,real +1561,real +1562,ai +1563,real +1564,real +1565,real +1566,ai +1567,ai +1568,ai +1569,real +1570,real +1571,real +1572,ai +1573,real +1574,ai +1575,real +1576,real +1577,real +1578,real +1579,real +1580,real +1581,ai +1582,real +1583,real +1584,ai +1585,real +1586,ai +1587,real +1588,ai +1589,ai +1590,ai +1591,real +1592,real +1593,real +1594,real +1595,real +1596,real +1597,ai +1598,real +1599,real +1600,real +1601,real +1602,real +1603,ai +1604,real +1605,real +1606,real +1607,ai +1608,real +1609,real +1610,real +1611,real +1612,real +1613,real +1614,real +1615,real +1616,ai +1617,real +1618,real +1619,real +1620,real +1621,ai +1622,real +1623,real +1624,real +1625,ai +1626,real +1627,real +1628,real +1629,ai +1630,real +1631,real +1632,real +1633,real +1634,real +1635,real +1636,real +1637,real +1638,real +1639,real +1640,real +1641,real +1642,real +1643,real +1644,real +1645,real +1646,real +1647,real +1648,real +1649,real +1650,real +1651,real +1652,ai +1653,real +1654,real +1655,real +1656,real +1657,real +1658,real +1659,real +1660,real +1661,ai +1662,real +1663,ai +1664,real +1665,real +1666,real +1667,ai +1668,real +1669,real +1670,ai +1671,real +1672,real +1673,ai +1674,ai +1675,real +1676,ai +1677,ai +1678,real +1679,real +1680,real +1681,real +1682,real +1683,real +1684,real +1685,ai +1686,ai +1687,real +1688,ai +1689,real +1690,real +1691,real +1692,real +1693,real +1694,real +1695,real +1696,real +1697,real +1698,ai +1699,real +1700,real +1701,real +1702,ai +1703,real +1704,ai +1705,real +1706,real +1707,real +1708,real +1709,real +1710,real +1711,real +1712,ai +1713,real +1714,real +1715,real +1716,real +1717,real +1718,ai +1719,ai +1720,real +1721,real +1722,real +1723,real +1724,real +1725,real +1726,real +1727,real +1728,real +1729,ai +1730,real +1731,real +1732,ai +1733,real +1734,real +1735,real +1736,ai +1737,real +1738,real +1739,real +1740,ai +1741,ai +1742,real +1743,real +1744,real +1745,ai +1746,ai +1747,real +1748,real +1749,real +1750,real +1751,real +1752,real +1753,ai +1754,ai +1755,real +1756,real +1757,real +1758,real +1759,real +1760,real +1761,real +1762,real +1763,real +1764,real +1765,real +1766,real +1767,real +1768,ai +1769,real +1770,real +1771,real +1772,real +1773,real +1774,real +1775,real +1776,real +1777,ai +1778,real +1779,real +1780,real +1781,ai +1782,real +1783,real +1784,real +1785,real +1786,real +1787,real +1788,real +1789,real +1790,ai +1791,real +1792,real +1793,real +1794,ai +1795,ai +1796,real +1797,ai +1798,ai +1799,real +1800,real +1801,real +1802,real +1803,real +1804,real +1805,real +1806,real +1807,real +1808,real +1809,real +1810,real +1811,real +1812,real +1813,ai +1814,real +1815,ai +1816,real +1817,real +1818,real +1819,real +1820,real +1821,real +1822,real +1823,real +1824,real +1825,real +1826,real +1827,real +1828,real +1829,real +1830,ai +1831,real +1832,real +1833,ai +1834,ai +1835,real +1836,real +1837,real +1838,real +1839,real +1840,real +1841,real +1842,ai +1843,real +1844,real +1845,ai +1846,real +1847,real +1848,real +1849,ai +1850,real +1851,ai +1852,real +1853,real +1854,real +1855,real +1856,real +1857,real +1858,real +1859,real +1860,real +1861,real +1862,ai +1863,real +1864,real +1865,real +1866,real +1867,real +1868,ai +1869,ai +1870,real +1871,real +1872,real +1873,real +1874,ai +1875,real +1876,real +1877,ai +1878,real +1879,real +1880,ai +1881,real +1882,real +1883,real +1884,real +1885,real +1886,real +1887,real +1888,real +1889,real +1890,real +1891,real +1892,real +1893,real +1894,real +1895,real +1896,real +1897,real +1898,real +1899,ai +1900,real +1901,real +1902,real +1903,real +1904,real +1905,real +1906,real +1907,real +1908,real +1909,real +1910,real +1911,real +1912,real +1913,real +1914,real +1915,real +1916,real +1917,real +1918,real +1919,real +1920,real +1921,real +1922,real +1923,real +1924,real +1925,real +1926,real +1927,real +1928,real +1929,real +1930,real +1931,real +1932,ai +1933,real +1934,real +1935,real +1936,real +1937,real +1938,real +1939,real +1940,real +1941,real +1942,real +1943,real +1944,real +1945,real +1946,ai +1947,real +1948,real +1949,ai +1950,real +1951,real +1952,real +1953,real +1954,real +1955,real +1956,real +1957,real +1958,real +1959,ai +1960,real +1961,real +1962,real +1963,real +1964,real +1965,real +1966,ai +1967,ai +1968,real +1969,ai +1970,real +1971,real +1972,real +1973,real +1974,real +1975,real +1976,real +1977,real +1978,real +1979,real +1980,ai +1981,real +1982,ai +1983,real +1984,real +1985,real +1986,real +1987,real +1988,real +1989,real +1990,real +1991,real +1992,real +1993,real +1994,real +1995,real +1996,real +1997,real +1998,real +1999,real +2000,ai +2001,real +2002,real +2003,real +2004,real +2005,real +2006,real +2007,ai +2008,real +2009,real +2010,real +2011,ai +2012,real +2013,real +2014,ai +2015,ai +2016,real +2017,real +2018,real +2019,real +2020,ai +2021,ai +2022,real +2023,ai +2024,real +2025,real +2026,real +2027,real +2028,real +2029,real +2030,real +2031,real +2032,real +2033,real +2034,real +2035,real +2036,real +2037,ai +2038,real +2039,real +2040,real +2041,ai +2042,real +2043,real +2044,real +2045,ai +2046,real +2047,real +2048,real +2049,real +2050,real +2051,ai +2052,real +2053,real +2054,real +2055,ai +2056,real +2057,real +2058,ai +2059,real +2060,real +2061,real +2062,real +2063,real +2064,real +2065,ai +2066,real +2067,real +2068,real +2069,real +2070,real +2071,real +2072,real +2073,ai +2074,real +2075,real +2076,ai +2077,real +2078,real +2079,real +2080,real +2081,ai +2082,real +2083,real +2084,real +2085,real +2086,real +2087,ai +2088,real +2089,real +2090,real +2091,real +2092,real +2093,real +2094,real +2095,real +2096,real +2097,real +2098,real +2099,real +2100,real +2101,real +2102,real +2103,real +2104,real +2105,real +2106,ai +2107,ai +2108,real +2109,ai +2110,real +2111,ai +2112,real +2113,real +2114,real +2115,ai +2116,real +2117,real +2118,real +2119,real +2120,ai +2121,real +2122,real +2123,real +2124,real +2125,real +2126,real +2127,real +2128,real +2129,real +2130,real +2131,real +2132,real +2133,real +2134,real +2135,real +2136,real +2137,real +2138,real +2139,ai +2140,ai +2141,ai +2142,ai +2143,real +2144,real +2145,real +2146,real +2147,real +2148,ai +2149,real +2150,ai +2151,real +2152,real +2153,real +2154,real +2155,real +2156,real +2157,real +2158,ai +2159,real +2160,real +2161,real +2162,real +2163,real +2164,real +2165,real +2166,real +2167,real +2168,real +2169,real +2170,real +2171,ai +2172,real +2173,real +2174,real +2175,real +2176,ai +2177,real +2178,ai +2179,real +2180,real +2181,real +2182,real +2183,real +2184,real +2185,real +2186,real +2187,real +2188,real +2189,real +2190,ai +2191,ai +2192,real +2193,real +2194,real +2195,ai +2196,real +2197,real +2198,real +2199,real +2200,real +2201,real +2202,ai +2203,real +2204,real +2205,real +2206,real +2207,real +2208,real +2209,real +2210,real +2211,real +2212,real +2213,real +2214,real +2215,real +2216,real +2217,ai +2218,real +2219,real +2220,real +2221,real +2222,real +2223,real +2224,real +2225,real +2226,real +2227,real +2228,real +2229,real +2230,real +2231,real +2232,real +2233,real +2234,real +2235,ai +2236,real +2237,real +2238,real +2239,real +2240,real +2241,real +2242,ai +2243,real +2244,ai +2245,real +2246,ai +2247,real +2248,real +2249,real +2250,real +2251,real +2252,real +2253,real +2254,real +2255,ai +2256,real +2257,real +2258,real +2259,real +2260,ai +2261,real +2262,ai +2263,real +2264,real +2265,real +2266,ai +2267,real +2268,real +2269,real +2270,ai +2271,real +2272,real +2273,real +2274,ai +2275,real +2276,real +2277,real +2278,real +2279,real +2280,real +2281,ai +2282,real +2283,real +2284,real +2285,real +2286,real +2287,real +2288,ai +2289,ai +2290,ai +2291,real +2292,real +2293,ai +2294,real +2295,real +2296,real +2297,real +2298,real +2299,real +2300,real +2301,real +2302,real +2303,ai +2304,real +2305,real +2306,real +2307,ai +2308,real +2309,ai +2310,real +2311,ai +2312,real +2313,ai +2314,real +2315,real +2316,real +2317,real +2318,real +2319,real +2320,ai +2321,real +2322,real +2323,real +2324,real +2325,real +2326,real +2327,real +2328,ai +2329,real +2330,real +2331,real +2332,ai +2333,real +2334,real +2335,real +2336,real +2337,real +2338,ai +2339,ai +2340,real +2341,ai +2342,real +2343,real +2344,real +2345,real +2346,real +2347,ai +2348,real +2349,real +2350,real +2351,real +2352,real +2353,ai +2354,real +2355,real +2356,real +2357,real +2358,real +2359,real +2360,ai +2361,real +2362,real +2363,real +2364,real +2365,real +2366,real +2367,real +2368,real +2369,real +2370,real +2371,real +2372,real +2373,real +2374,real +2375,real +2376,real +2377,real +2378,ai +2379,real +2380,real +2381,real +2382,real +2383,real +2384,real +2385,real +2386,real +2387,real +2388,real +2389,ai +2390,real +2391,real +2392,real +2393,real +2394,real +2395,ai +2396,real +2397,ai +2398,ai +2399,real +2400,ai +2401,real +2402,real +2403,real +2404,real +2405,real +2406,real +2407,real +2408,real +2409,ai +2410,ai +2411,real +2412,ai +2413,ai +2414,real +2415,ai +2416,real +2417,real +2418,ai +2419,real +2420,real +2421,real +2422,ai +2423,real +2424,real +2425,ai +2426,real +2427,real +2428,ai +2429,real +2430,real +2431,real +2432,real +2433,real +2434,real +2435,real +2436,real +2437,ai +2438,ai +2439,real +2440,real +2441,ai +2442,real +2443,real +2444,real +2445,ai +2446,real +2447,real +2448,real +2449,real +2450,real +2451,real +2452,ai +2453,real +2454,real +2455,real +2456,real +2457,ai +2458,real +2459,real +2460,real +2461,real +2462,real +2463,real +2464,real +2465,real +2466,real +2467,ai +2468,real +2469,real +2470,real +2471,real +2472,real +2473,real +2474,real +2475,ai +2476,real +2477,real +2478,real +2479,real +2480,real +2481,ai +2482,real +2483,real +2484,ai +2485,real +2486,real +2487,ai +2488,real +2489,real +2490,real +2491,real +2492,real +2493,real +2494,real +2495,ai +2496,real +2497,ai +2498,real +2499,real +2500,real +2501,real +2502,real +2503,real +2504,real +2505,real +2506,real +2507,real +2508,real +2509,ai +2510,real +2511,real +2512,real +2513,real +2514,real +2515,real +2516,real +2517,ai +2518,real +2519,real +2520,real +2521,real +2522,real +2523,real +2524,real +2525,real +2526,real +2527,real +2528,ai +2529,real +2530,ai +2531,real +2532,real +2533,real +2534,real +2535,real +2536,ai +2537,real +2538,real +2539,real +2540,real +2541,real +2542,real +2543,ai +2544,real +2545,real +2546,real +2547,real +2548,real +2549,real +2550,real +2551,ai +2552,real +2553,real +2554,ai +2555,real +2556,real +2557,real +2558,real +2559,real +2560,real +2561,real +2562,real +2563,real +2564,real +2565,real +2566,real +2567,real +2568,real +2569,real +2570,real +2571,ai +2572,real +2573,real +2574,ai +2575,real +2576,real +2577,ai +2578,real +2579,real +2580,ai +2581,real +2582,real +2583,real +2584,ai +2585,ai +2586,real +2587,ai +2588,real +2589,real +2590,ai +2591,real +2592,real +2593,real +2594,real +2595,real +2596,real +2597,real +2598,real +2599,real +2600,real +2601,real +2602,real +2603,real +2604,real +2605,real +2606,real +2607,real +2608,real +2609,real +2610,real +2611,real +2612,real +2613,real +2614,real +2615,real +2616,real +2617,real +2618,real +2619,real +2620,real +2621,real +2622,real +2623,real +2624,real +2625,real +2626,real +2627,real +2628,real +2629,real +2630,real +2631,real +2632,real +2633,real +2634,real +2635,ai +2636,ai +2637,real +2638,real +2639,real +2640,real +2641,real +2642,ai +2643,real +2644,real +2645,real +2646,real +2647,ai +2648,real +2649,real +2650,real +2651,real +2652,ai +2653,ai +2654,real +2655,real +2656,real +2657,real +2658,real +2659,real +2660,real +2661,real +2662,real +2663,real +2664,real +2665,real +2666,real +2667,real +2668,real +2669,real +2670,ai +2671,real +2672,real +2673,real +2674,real +2675,real +2676,real +2677,real +2678,real +2679,real +2680,real +2681,real +2682,real +2683,real +2684,real +2685,real +2686,real +2687,ai +2688,real +2689,real +2690,real +2691,real +2692,real +2693,real +2694,real +2695,ai +2696,real +2697,real +2698,real +2699,real +2700,real +2701,ai +2702,real +2703,real +2704,real +2705,real +2706,real +2707,ai +2708,ai +2709,real +2710,real +2711,real +2712,real +2713,real +2714,real +2715,real +2716,real +2717,real +2718,ai +2719,real +2720,real +2721,real +2722,real +2723,real +2724,real +2725,real +2726,ai +2727,real +2728,real +2729,real +2730,ai +2731,real +2732,real +2733,real +2734,real +2735,real +2736,real +2737,real +2738,real +2739,real +2740,real +2741,real +2742,real +2743,real +2744,real +2745,ai +2746,real +2747,real +2748,ai +2749,real +2750,real +2751,real +2752,real +2753,real +2754,real +2755,real +2756,real +2757,real +2758,real +2759,real +2760,real +2761,real +2762,ai +2763,real +2764,real +2765,real +2766,real +2767,real +2768,real +2769,ai +2770,real +2771,real +2772,real +2773,real +2774,real +2775,real +2776,real +2777,real +2778,real +2779,real +2780,real +2781,real +2782,real +2783,real +2784,real +2785,real +2786,real +2787,ai +2788,real +2789,real +2790,ai +2791,ai +2792,real +2793,ai +2794,real +2795,real +2796,real +2797,ai +2798,real +2799,real +2800,real +2801,real +2802,ai +2803,real +2804,real +2805,real +2806,real +2807,real +2808,ai +2809,real +2810,real +2811,real +2812,ai +2813,real +2814,real +2815,real +2816,real +2817,real +2818,real +2819,real +2820,real +2821,real +2822,ai +2823,real +2824,real +2825,real +2826,real +2827,real +2828,real +2829,real +2830,real +2831,real +2832,real +2833,ai +2834,real +2835,real +2836,real +2837,real +2838,real +2839,ai +2840,real +2841,ai +2842,real +2843,real +2844,real +2845,real +2846,real +2847,real +2848,real +2849,real +2850,real +2851,real +2852,real +2853,real +2854,real +2855,real +2856,real +2857,ai +2858,real +2859,real +2860,ai +2861,real +2862,real +2863,real +2864,ai +2865,ai +2866,real +2867,real +2868,real +2869,real +2870,real +2871,ai +2872,ai +2873,real +2874,real +2875,ai +2876,real +2877,real +2878,real +2879,real +2880,real +2881,ai +2882,real +2883,ai +2884,real +2885,real +2886,real +2887,real +2888,real +2889,ai +2890,real +2891,real +2892,real +2893,real +2894,ai +2895,real +2896,real +2897,real +2898,real +2899,real +2900,real +2901,real +2902,real +2903,real +2904,real +2905,real +2906,real +2907,real +2908,real +2909,real +2910,real +2911,ai +2912,real +2913,ai +2914,real +2915,real +2916,real +2917,real +2918,real +2919,real +2920,real +2921,real +2922,real +2923,real +2924,real +2925,real +2926,real +2927,ai +2928,ai +2929,real +2930,ai +2931,real +2932,real +2933,real +2934,real +2935,ai +2936,real +2937,ai +2938,real +2939,real +2940,real +2941,real +2942,real +2943,real +2944,real +2945,real +2946,real +2947,real +2948,real +2949,real +2950,real +2951,real +2952,real +2953,real +2954,real +2955,real +2956,real +2957,real +2958,real +2959,real +2960,real +2961,real +2962,real +2963,real +2964,ai +2965,real +2966,real +2967,real +2968,real +2969,real +2970,ai +2971,real +2972,real +2973,ai +2974,real +2975,real +2976,real +2977,real +2978,ai +2979,real +2980,real +2981,ai +2982,ai +2983,real +2984,real +2985,real +2986,real +2987,real +2988,ai +2989,real +2990,ai +2991,ai +2992,real +2993,real +2994,real +2995,real +2996,real +2997,real +2998,real +2999,real +3000,real +3001,real +3002,ai +3003,real +3004,real +3005,real +3006,real +3007,real +3008,real +3009,real +3010,ai +3011,real +3012,real +3013,real +3014,real +3015,real +3016,ai +3017,real +3018,real +3019,real +3020,real +3021,real +3022,real +3023,real +3024,real +3025,real +3026,real +3027,real +3028,real +3029,real +3030,ai +3031,real +3032,ai +3033,real +3034,real +3035,real +3036,real +3037,real +3038,real +3039,real +3040,real +3041,real +3042,real +3043,ai +3044,real +3045,real +3046,real +3047,real +3048,real +3049,real +3050,real +3051,real +3052,real +3053,real +3054,real +3055,real +3056,real +3057,real +3058,real +3059,ai +3060,ai +3061,ai +3062,real +3063,ai +3064,real +3065,real +3066,real +3067,real +3068,real +3069,real +3070,real +3071,real +3072,ai +3073,real +3074,real +3075,ai +3076,real +3077,real +3078,real +3079,ai +3080,real +3081,real +3082,real +3083,real +3084,real +3085,real +3086,real +3087,ai +3088,real +3089,real +3090,real +3091,real +3092,real +3093,ai +3094,real +3095,real +3096,real +3097,ai +3098,real +3099,real +3100,real +3101,real +3102,real +3103,real +3104,real +3105,real +3106,real +3107,real +3108,real +3109,real +3110,real +3111,real +3112,real +3113,real +3114,real +3115,real +3116,real +3117,real +3118,ai +3119,real +3120,real +3121,real +3122,real +3123,real +3124,ai +3125,real +3126,real +3127,real +3128,ai +3129,real +3130,real +3131,real +3132,real +3133,real +3134,real +3135,real +3136,real +3137,real +3138,real +3139,ai +3140,real +3141,ai +3142,real +3143,real +3144,real +3145,real +3146,real +3147,real +3148,real +3149,real +3150,real +3151,real +3152,real +3153,real +3154,real +3155,ai +3156,real +3157,real +3158,real +3159,real +3160,real +3161,real +3162,ai +3163,real +3164,real +3165,ai +3166,real +3167,real +3168,real +3169,real +3170,real +3171,real +3172,real +3173,ai +3174,real +3175,real +3176,ai +3177,real +3178,real +3179,real +3180,ai +3181,ai +3182,real +3183,real +3184,real +3185,real +3186,real +3187,real +3188,real +3189,real +3190,ai +3191,real +3192,real +3193,real +3194,real +3195,real +3196,real +3197,real +3198,real +3199,real +3200,real +3201,real +3202,real +3203,real +3204,real +3205,real +3206,real +3207,real +3208,real +3209,real +3210,real +3211,real +3212,real +3213,real +3214,real +3215,real +3216,ai +3217,real +3218,real +3219,real +3220,real +3221,real +3222,real +3223,ai +3224,ai +3225,real +3226,real +3227,real +3228,real +3229,ai +3230,real +3231,real +3232,real +3233,real +3234,real +3235,real +3236,real +3237,real +3238,real +3239,real +3240,real +3241,real +3242,real +3243,real +3244,real +3245,real +3246,real +3247,real +3248,real +3249,ai +3250,real +3251,real +3252,real +3253,real +3254,real +3255,ai +3256,real +3257,real +3258,ai +3259,real +3260,real +3261,real +3262,real +3263,real +3264,real +3265,real +3266,real +3267,real +3268,real +3269,real +3270,real +3271,real +3272,real +3273,real +3274,real +3275,ai +3276,ai +3277,real +3278,real +3279,real +3280,real +3281,real +3282,ai +3283,ai +3284,real +3285,real +3286,real +3287,real +3288,ai +3289,real +3290,real +3291,ai +3292,real +3293,ai +3294,real +3295,ai +3296,real +3297,ai +3298,real +3299,real +3300,real +3301,real +3302,real +3303,real +3304,real +3305,real +3306,real +3307,real +3308,ai +3309,real +3310,ai +3311,real +3312,real +3313,real +3314,real +3315,real +3316,real +3317,real +3318,real +3319,ai +3320,real +3321,real +3322,real +3323,real +3324,real +3325,real +3326,ai +3327,real +3328,real +3329,real +3330,real +3331,real +3332,real +3333,ai +3334,real +3335,real +3336,ai +3337,ai +3338,real +3339,real +3340,ai +3341,real +3342,real +3343,real +3344,real +3345,real +3346,real +3347,real +3348,real +3349,real +3350,real +3351,ai +3352,real +3353,real +3354,real +3355,ai +3356,real +3357,ai +3358,real +3359,real +3360,real +3361,real +3362,real +3363,real +3364,ai +3365,real +3366,real +3367,real +3368,real +3369,ai +3370,real +3371,ai +3372,real +3373,real +3374,real +3375,real +3376,real +3377,real +3378,real +3379,real +3380,real +3381,ai +3382,real +3383,real +3384,real +3385,real +3386,real +3387,real +3388,ai +3389,real +3390,real +3391,real +3392,ai +3393,real +3394,real +3395,real +3396,real +3397,real +3398,real +3399,real +3400,real +3401,real +3402,ai +3403,real +3404,real +3405,real +3406,ai +3407,real +3408,real +3409,real +3410,real +3411,ai +3412,real +3413,real +3414,real +3415,real +3416,real +3417,real +3418,real +3419,real +3420,real +3421,ai +3422,real +3423,real +3424,real +3425,real +3426,real +3427,real +3428,real +3429,ai +3430,ai +3431,real +3432,ai +3433,ai +3434,real +3435,real +3436,real +3437,real +3438,ai +3439,real +3440,ai +3441,real +3442,real +3443,real +3444,real +3445,real +3446,real +3447,ai +3448,ai +3449,real +3450,real +3451,real +3452,real +3453,real +3454,real +3455,real +3456,ai +3457,real +3458,real +3459,real +3460,real +3461,real +3462,real +3463,real +3464,real +3465,real +3466,real +3467,ai +3468,real +3469,real +3470,real +3471,ai +3472,real +3473,real +3474,real +3475,real +3476,real +3477,real +3478,real +3479,real +3480,real +3481,real +3482,real +3483,real +3484,ai +3485,real +3486,real +3487,real +3488,real +3489,real +3490,ai +3491,real +3492,real +3493,real +3494,real +3495,real +3496,real +3497,real +3498,real +3499,real +3500,real +3501,real +3502,ai +3503,real +3504,real +3505,ai +3506,ai +3507,real +3508,real +3509,real +3510,real +3511,real +3512,ai +3513,real +3514,real +3515,real +3516,ai +3517,ai +3518,real +3519,ai +3520,real +3521,ai +3522,real +3523,real +3524,real +3525,real +3526,real +3527,ai +3528,real +3529,real +3530,real +3531,real +3532,real +3533,real +3534,real +3535,real +3536,real +3537,real +3538,ai +3539,real +3540,real +3541,real +3542,ai +3543,real +3544,real +3545,real +3546,real +3547,real +3548,real +3549,real +3550,real +3551,real +3552,real +3553,ai +3554,real +3555,real +3556,real +3557,real +3558,real +3559,ai +3560,real +3561,ai +3562,real +3563,real +3564,real +3565,real +3566,real +3567,real +3568,real +3569,real +3570,ai +3571,real +3572,real +3573,real +3574,ai +3575,ai +3576,real +3577,real +3578,ai +3579,real +3580,real +3581,real +3582,ai +3583,real +3584,real +3585,real +3586,real +3587,ai +3588,real +3589,real +3590,real +3591,real +3592,real +3593,real +3594,real +3595,real +3596,ai +3597,real +3598,real +3599,ai +3600,real +3601,ai +3602,real +3603,real +3604,real +3605,real +3606,real +3607,real +3608,real +3609,ai +3610,real +3611,real +3612,real +3613,real +3614,real +3615,real +3616,real +3617,real +3618,real +3619,ai +3620,real +3621,real +3622,real +3623,ai +3624,ai +3625,real +3626,real +3627,ai +3628,real +3629,ai +3630,real +3631,real +3632,ai +3633,real +3634,real +3635,real +3636,ai +3637,real +3638,ai +3639,real +3640,real +3641,real +3642,real +3643,real +3644,real +3645,real +3646,ai +3647,real +3648,real +3649,real +3650,ai +3651,real +3652,ai +3653,real +3654,real +3655,real +3656,real +3657,real +3658,real +3659,real +3660,real +3661,ai +3662,real +3663,real +3664,real +3665,real +3666,real +3667,real +3668,real +3669,real +3670,real +3671,real +3672,real +3673,real +3674,real +3675,real +3676,real +3677,real +3678,real +3679,ai +3680,real +3681,real +3682,real +3683,real +3684,real +3685,real +3686,ai +3687,real +3688,ai +3689,real +3690,ai +3691,real +3692,ai +3693,ai +3694,real +3695,real +3696,real +3697,real +3698,real +3699,ai +3700,real +3701,real +3702,real +3703,real +3704,real +3705,real +3706,real +3707,real +3708,real +3709,real +3710,real +3711,real +3712,real +3713,real +3714,real +3715,ai +3716,ai +3717,real +3718,real +3719,real +3720,real +3721,real +3722,real +3723,real +3724,real +3725,real +3726,real +3727,real +3728,ai +3729,real +3730,real +3731,real +3732,real +3733,real +3734,real +3735,real +3736,real +3737,real +3738,real +3739,ai +3740,ai +3741,real +3742,real +3743,real +3744,real +3745,ai +3746,real +3747,real +3748,real +3749,real +3750,ai +3751,real +3752,real +3753,ai +3754,real +3755,real +3756,real +3757,ai +3758,real +3759,real +3760,real +3761,ai +3762,real +3763,ai +3764,real +3765,real +3766,real +3767,real +3768,real +3769,real +3770,real +3771,ai +3772,real +3773,real +3774,ai +3775,ai +3776,ai +3777,real +3778,real +3779,real +3780,real +3781,real +3782,real +3783,real +3784,real +3785,real +3786,real +3787,real +3788,real +3789,ai +3790,real +3791,real +3792,ai +3793,real +3794,real +3795,real +3796,real +3797,ai +3798,ai +3799,real +3800,real +3801,real +3802,real +3803,real +3804,ai +3805,ai +3806,ai +3807,ai +3808,real +3809,real +3810,real +3811,real +3812,ai +3813,real +3814,real +3815,ai +3816,real +3817,ai +3818,real +3819,ai +3820,real +3821,real +3822,real +3823,real +3824,real +3825,real +3826,real +3827,real +3828,real +3829,real +3830,real +3831,real +3832,real +3833,real +3834,real +3835,ai +3836,ai +3837,real +3838,real +3839,real +3840,real +3841,real +3842,real +3843,real +3844,real +3845,real +3846,real +3847,real +3848,real +3849,real +3850,real +3851,ai +3852,ai +3853,real +3854,ai +3855,real +3856,real +3857,ai +3858,real +3859,real +3860,real +3861,real +3862,real +3863,ai +3864,ai +3865,real +3866,real +3867,real +3868,real +3869,ai +3870,real +3871,real +3872,ai +3873,ai +3874,ai +3875,real +3876,real +3877,real +3878,real +3879,real +3880,real +3881,real +3882,real +3883,real +3884,ai +3885,ai +3886,real +3887,real +3888,real +3889,real +3890,real +3891,real +3892,real +3893,real +3894,ai +3895,real +3896,ai +3897,ai +3898,real +3899,real +3900,real +3901,ai +3902,real +3903,real +3904,ai +3905,ai +3906,real +3907,real +3908,real +3909,real +3910,real +3911,real +3912,real +3913,real +3914,real +3915,ai +3916,real +3917,ai +3918,real +3919,real +3920,real +3921,ai +3922,ai +3923,real +3924,real +3925,real +3926,real +3927,real +3928,real +3929,real +3930,ai +3931,ai +3932,real +3933,ai +3934,real +3935,real +3936,real +3937,real +3938,real +3939,real +3940,real +3941,real +3942,real +3943,real +3944,real +3945,real +3946,ai +3947,real +3948,ai +3949,real +3950,real +3951,ai +3952,real +3953,real +3954,real +3955,real +3956,real +3957,ai +3958,real +3959,real +3960,ai +3961,real +3962,real +3963,ai +3964,real +3965,real +3966,real +3967,real +3968,real +3969,ai +3970,real +3971,real +3972,real +3973,real +3974,real +3975,real +3976,real +3977,real +3978,real +3979,real +3980,ai +3981,ai +3982,real +3983,real +3984,real +3985,real +3986,real +3987,ai +3988,real +3989,real +3990,real +3991,real +3992,real +3993,ai +3994,real +3995,real +3996,real +3997,real +3998,real +3999,real diff --git a/real-or-ai.h5 b/real-or-ai.h5 new file mode 100644 index 0000000..689866e Binary files /dev/null and b/real-or-ai.h5 differ diff --git a/real-vs-ai.ipynb b/real-vs-ai.ipynb new file mode 100644 index 0000000..58b9e7d --- /dev/null +++ b/real-vs-ai.ipynb @@ -0,0 +1,501 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "#steps\n", + "\n", + "#separate the training data and validation data\n", + "#1. separate training and validation data sets into folder.\n", + "#2.set directories to the file\n", + "#3.create image layer for all that includes their pixel and color format\n", + "#4.Create deep learing model using Keras API(Namuna)\n", + "\n", + "##Dipendra\n", + "#5. compile model \n", + "#6. sets up the data generators for loading and preprocessing images for training and validation in a deep learning model.\n", + "#7. train the deep learning model using the fit_generator() method from the Keras API.\n", + "\n", + "##Jeffrey\n", + "#8. save model\n", + "#9. optional create a function that calculates accuracy of model based on validation data.\n", + "#10. create a function that loads the validation data to the model we create and generate a CSV file of the result.(Jeffrey)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "##1 setting directory\n", + "\n", + "import os\n", + "\n", + "#base directory: replace it with the base directory of yours\n", + "base_dir = 'C:\\\\Users\\\\namun\\\\AD-470 PRACTICUM LOCAL\\\\real-or-ai'\n", + "\n", + "#train and validation directory\n", + "train_dir = os.path.join(base_dir, 'train')\n", + "validation_dir = os.path.join(base_dir, 'validation')#test \n", + "validate_real= os.path.join(base_dir, 'real')\n", + "validate_ai = os.path.join(base_dir, 'ai')\n", + "\n", + "\n", + "# Directory with our training ai pictures\n", + "train_ai_dir = os.path.join(train_dir, 'ai')\n", + "\n", + "# Directory with our training real pictures\n", + "train_real_dir = os.path.join(train_dir, 'real')\n", + "\n", + "#print('total validation images:', len(os.listdir(validation_dir)))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "##2\n", + "\n", + "train_real_fnames = os.listdir(train_real_dir)\n", + "train_real_fnames.sort()\n", + "#print(train_real_fnames[:5])\n", + "\n", + "train_ai_fnames = os.listdir(train_ai_dir)\n", + "train_ai_fnames.sort()\n", + "#print(train_ai_fnames[:5])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "##3 \n", + "from tensorflow.keras import layers\n", + "from tensorflow.keras import Model\n", + "# Our input feature map is 150x150x3: 150x150 for the image pixels, and 3 for\n", + "# the three color channels: R, G, and B\n", + "\n", + "img_input = layers.Input(shape=(150, 150, 3))\n", + "\n", + "# First convolution extracts 16 filters that are 3x3\n", + "# Convolution is followed by max-pooling layer with a 2x2 window\n", + "x = layers.Conv2D(16, 3, activation='relu')(img_input)\n", + "x = layers.MaxPooling2D(2)(x)\n", + "\n", + "# Second convolution extracts 32 filters that are 3x3\n", + "# Convolution is followed by max-pooling layer with a 2x2 window\n", + "x = layers.Conv2D(32, 3, activation='relu')(x)\n", + "x = layers.MaxPooling2D(2)(x)\n", + "\n", + "# Third convolution extracts 64 filters that are 3x3\n", + "# Convolution is followed by max-pooling layer with a 2x2 window\n", + "x = layers.Conv2D(64, 3, activation='relu')(x)\n", + "x = layers.MaxPooling2D(2)(x)\n", + "\n", + "# Fourth convolution extracts 128 filters that are 3x3\n", + "# Convolution is followed by max-pooling layer with a 2x2 window\n", + "x = layers.Conv2D(128, 3, activation='relu')(x)\n", + "x = layers.MaxPooling2D(2)(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"model\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "input_1 (InputLayer) [(None, 150, 150, 3)] 0 \n", + "_________________________________________________________________\n", + "conv2d (Conv2D) (None, 148, 148, 16) 448 \n", + "_________________________________________________________________\n", + "max_pooling2d (MaxPooling2D) (None, 74, 74, 16) 0 \n", + "_________________________________________________________________\n", + "conv2d_1 (Conv2D) (None, 72, 72, 32) 4640 \n", + "_________________________________________________________________\n", + "max_pooling2d_1 (MaxPooling2 (None, 36, 36, 32) 0 \n", + "_________________________________________________________________\n", + "conv2d_2 (Conv2D) (None, 34, 34, 64) 18496 \n", + "_________________________________________________________________\n", + "max_pooling2d_2 (MaxPooling2 (None, 17, 17, 64) 0 \n", + "_________________________________________________________________\n", + "conv2d_3 (Conv2D) (None, 15, 15, 128) 73856 \n", + "_________________________________________________________________\n", + "max_pooling2d_3 (MaxPooling2 (None, 7, 7, 128) 0 \n", + "_________________________________________________________________\n", + "flatten (Flatten) (None, 6272) 0 \n", + "_________________________________________________________________\n", + "dense (Dense) (None, 512) 3211776 \n", + "_________________________________________________________________\n", + "dense_1 (Dense) (None, 1) 513 \n", + "=================================================================\n", + "Total params: 3,309,729\n", + "Trainable params: 3,309,729\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "##4\n", + "\n", + "# Flatten feature map to a 1-dim tensor so we can add fully connected layers\n", + "x = layers.Flatten()(x)\n", + "\n", + "# Create a fully connected layer with ReLU activation and 512 hidden units\n", + "x = layers.Dense(512, activation='relu')(x)\n", + "\n", + "# Create output layer with a single node and sigmoid activation\n", + "output = layers.Dense(1, activation='sigmoid')(x)\n", + "\n", + "# Create model:\n", + "# input = input feature map\n", + "# output = input feature map + stacked convolution/maxpooling layers + fully \n", + "# connected layer + sigmoid output layer\n", + "model = Model(img_input, output)\n", + "\n", + "#uncooment for summary\n", + "model.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "#5\n", + "from tensorflow.keras.optimizers import RMSprop\n", + "\n", + "model.compile(loss='binary_crossentropy',\n", + " optimizer=RMSprop(lr=0.001),\n", + "\n", + " metrics=['acc'])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found 56783 images belonging to 2 classes.\n", + "Found 4000 images belonging to 1 classes.\n" + ] + } + ], + "source": [ + "#6\n", + "from tensorflow.keras.preprocessing.image import ImageDataGenerator\n", + "\n", + "# All images will be rescaled by 1./255\n", + "train_datagen = ImageDataGenerator(rescale=1./255)\n", + "val_datagen = ImageDataGenerator(rescale=1./255)\n", + "\n", + "# Flow training images in batches of 20 using train_datagen generator\n", + "train_generator = train_datagen.flow_from_directory(\n", + " train_dir, # This is the source directory for training images\n", + " target_size=(150, 150), # All images will be resized to 150x150\n", + " batch_size=20,\n", + " # Since we use binary_crossentropy loss, we need binary labels\n", + " class_mode='binary')\n", + "\n", + "# Flow validation images in batches of 20 using val_datagen generator\n", + "validation_generator = val_datagen.flow_from_directory(\n", + " validation_dir,\n", + " target_size=(150, 150),\n", + " batch_size=20,\n", + " class_mode='binary')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:From :8: Model.fit_generator (from tensorflow.python.keras.engine.training) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Please use Model.fit, which supports generators.\n", + "WARNING:tensorflow:sample_weight modes were coerced from\n", + " ...\n", + " to \n", + " ['...']\n", + "WARNING:tensorflow:sample_weight modes were coerced from\n", + " ...\n", + " to \n", + " ['...']\n", + "Train for 100 steps, validate for 50 steps\n", + "Epoch 1/2\n", + "100/100 - 102s - loss: 0.2862 - acc: 0.9145 - val_loss: 18.8965 - val_acc: 0.0200\n", + "Epoch 2/2\n", + "100/100 - 89s - loss: 0.3483 - acc: 0.9880 - val_loss: 15.3663 - val_acc: 0.0440\n" + ] + } + ], + "source": [ + "#7\n", + "history = model.fit_generator(\n", + " train_generator,\n", + " steps_per_epoch=100, # 2000 images = batch_size * steps\n", + " epochs=2,\n", + " validation_data=validation_generator,\n", + " validation_steps=50, # 1000 images = batch_size * steps\n", + " verbose=2)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "#8 \n", + "model.save(\"real-or-ai.h5\") #by default this will save it under current note book file directory" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "#9 create a function that calculates accuracy of model based on validation data\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "#10 \n", + "\n", + "import os\n", + "import pandas as pd\n", + "from tensorflow.keras.preprocessing.image import load_img, img_to_array\n", + "from tensorflow.keras.models import load_model\n", + "\n", + "# Load the trained model\n", + "model = load_model(\"C:\\\\Users\\\\namun\\\\AD-470 PRACTICUM LOCAL\")\n", + "\n", + "# Define the directory containing the test images\n", + "test_dir = 'C:\\\\Users\\\\namun\\\\AD-470 PRACTICUM LOCAL\\\\real-or-ai\\\\validation\\\\validation'\n", + "\n", + "# Get a list of the image file names in the directory\n", + "image_filenames = os.listdir(test_dir)\n", + "\n", + "# Create an empty list to store the predictions\n", + "predictions = []\n", + "\n", + "# Loop over each image file in the directory\n", + "for image_filename in image_filenames:\n", + " # Load the image file\n", + " image = load_img(os.path.join(test_dir, image_filename), target_size=(150, 150))\n", + " \n", + " # Convert the image to a NumPy array\n", + " image_array = img_to_array(image) / 255.\n", + " \n", + " # Add a batch dimension to the array\n", + " image_array = image_array.reshape((1, 150, 150, 3))\n", + " \n", + " # Make a prediction on the image\n", + " prediction = model.predict(image_array)[0][0]\n", + " \n", + " # Append the prediction to the list\n", + " predictions.append((image_filename.split('.')[0], 'real' if prediction > 0.5 else 'ai'))\n", + "\n", + "# Create a DataFrame from the predictions list\n", + "df = pd.DataFrame(predictions, columns=['id', 'class'])\n", + "\n", + "# Write the DataFrame to a CSV file\n", + "df.to_csv('real-or-ai-predictions.csv', index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "ERROR:root:Internal Python error in the inspect module.\n", + "Below is the traceback from this internal error.\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Traceback (most recent call last):\n", + " File \"c:\\Users\\namun\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3326, in run_code\n", + " exec(code_obj, self.user_global_ns, self.user_ns)\n", + " File \"\", line 47, in \n", + " calculate_accuracy(validate_real,model)\n", + " File \"\", line 30, in calculate_accuracy\n", + " preprocessed_images = preprocess_images(images)\n", + " File \"\", line 13, in preprocess_images\n", + " image = load_img(image_filename, target_size=(150, 150))\n", + " File \"c:\\Users\\namun\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\keras_preprocessing\\image\\utils.py\", line 113, in load_img\n", + " with open(path, 'rb') as f:\n", + "FileNotFoundError: [Errno 2] No such file or directory: 'C'\n", + "\n", + "During handling of the above exception, another exception occurred:\n", + "\n", + "Traceback (most recent call last):\n", + " File \"c:\\Users\\namun\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2040, in showtraceback\n", + " stb = value._render_traceback_()\n", + "AttributeError: 'FileNotFoundError' object has no attribute '_render_traceback_'\n", + "\n", + "During handling of the above exception, another exception occurred:\n", + "\n", + "Traceback (most recent call last):\n", + " File \"c:\\Users\\namun\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 1101, in get_records\n", + " return _fixed_getinnerframes(etb, number_of_lines_of_context, tb_offset)\n", + " File \"c:\\Users\\namun\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 319, in wrapped\n", + " return f(*args, **kwargs)\n", + " File \"c:\\Users\\namun\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 353, in _fixed_getinnerframes\n", + " records = fix_frame_records_filenames(inspect.getinnerframes(etb, context))\n", + " File \"c:\\Users\\namun\\AppData\\Local\\Continuum\\anaconda3\\lib\\inspect.py\", line 1502, in getinnerframes\n", + " frameinfo = (tb.tb_frame,) + getframeinfo(tb, context)\n", + " File \"c:\\Users\\namun\\AppData\\Local\\Continuum\\anaconda3\\lib\\inspect.py\", line 1460, in getframeinfo\n", + " filename = getsourcefile(frame) or getfile(frame)\n", + " File \"c:\\Users\\namun\\AppData\\Local\\Continuum\\anaconda3\\lib\\inspect.py\", line 696, in getsourcefile\n", + " if getattr(getmodule(object, filename), '__loader__', None) is not None:\n", + " File \"c:\\Users\\namun\\AppData\\Local\\Continuum\\anaconda3\\lib\\inspect.py\", line 733, in getmodule\n", + " if ismodule(module) and hasattr(module, '__file__'):\n", + " File \"c:\\Users\\namun\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\tensorflow\\__init__.py\", line 50, in __getattr__\n", + " module = self._load()\n", + " File \"c:\\Users\\namun\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\tensorflow\\__init__.py\", line 44, in _load\n", + " module = _importlib.import_module(self.__name__)\n", + " File \"c:\\Users\\namun\\AppData\\Local\\Continuum\\anaconda3\\lib\\importlib\\__init__.py\", line 127, in import_module\n", + " return _bootstrap._gcd_import(name[level:], package, level)\n", + " File \"\", line 1006, in _gcd_import\n", + " File \"\", line 983, in _find_and_load\n", + " File \"\", line 965, in _find_and_load_unlocked\n", + "ModuleNotFoundError: No module named 'tensorflow_core.estimator'\n" + ] + }, + { + "ename": "FileNotFoundError", + "evalue": "[Errno 2] No such file or directory: 'C'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m" + ] + } + ], + "source": [ + "#Adding a function that can determine accuracy since the project was closed\n", + "import tensorflow as tf\n", + "import tensorflow as tf\n", + "from tensorflow.keras.preprocessing.image import load_img, img_to_array\n", + "import os\n", + "\n", + "# Preprocess the images\n", + "def preprocess_images(images):\n", + " preprocessed_images = []\n", + " \n", + " for image_filename in images:\n", + " # Load the image file\n", + " image = load_img(image_filename, target_size=(150, 150))\n", + " \n", + " # Convert the image to a NumPy array\n", + " image_array = img_to_array(image) / 255.\n", + " \n", + " # Add a batch dimension to the array\n", + " image_array = image_array.reshape((1, 150, 150, 3))\n", + " \n", + " preprocessed_images.append(image_array)\n", + " \n", + " return preprocessed_images\n", + "\n", + "\n", + "\n", + "\n", + "def calculate_accuracy(images, model):\n", + " # Preprocess the images\n", + " preprocessed_images = preprocess_images(images)\n", + " \n", + " # Make predictions using the model\n", + " predictions = model.predict(preprocessed_images)\n", + " \n", + " # Calculate the accuracy\n", + " num_correct = 0\n", + " num_total = len(images)\n", + " \n", + " for i in range(len(images)):\n", + " if predictions[i] == images[i].label:\n", + " num_correct += 1\n", + " \n", + " accuracy = (num_correct / num_total) * 100\n", + " \n", + " return accuracy\n", + "\n", + "calculate_accuracy(validate_real,model)\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "2e7b1d15100c9772277e2b4b8b99a8bb6cf88c4c06e0444c3999d6c521403cc4" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}