diff --git a/0_numpy_matplotlib_scipy_sympy/matplotlib_ani2.ipynb b/0_numpy_matplotlib_scipy_sympy/matplotlib_ani2.ipynb
index 4444c12..8d1b71c 100644
--- a/0_numpy_matplotlib_scipy_sympy/matplotlib_ani2.ipynb
+++ b/0_numpy_matplotlib_scipy_sympy/matplotlib_ani2.ipynb
@@ -788,7 +788,7 @@
{
"data": {
"text/html": [
- ""
+ ""
],
"text/plain": [
""
diff --git a/1_logistic_regression/Least_squares.ipynb b/1_logistic_regression/Least_squares.ipynb
index dbcca07..c298cf0 100644
--- a/1_logistic_regression/Least_squares.ipynb
+++ b/1_logistic_regression/Least_squares.ipynb
@@ -18,7 +18,7 @@
},
{
"cell_type": "code",
- "execution_count": 64,
+ "execution_count": 13,
"metadata": {},
"outputs": [
{
@@ -106,7 +106,7 @@
},
{
"cell_type": "code",
- "execution_count": 65,
+ "execution_count": 14,
"metadata": {},
"outputs": [
{
@@ -160,6 +160,3944 @@
"cell_type": "markdown",
"metadata": {},
"source": [
+ "## How to use iterative method to estimate parameters?\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "epoch 0: loss = 4303817.496892, a = 2.826518, b = 90.332322\n",
+ "epoch 1: loss = 2886806.756007, a = 4.689320, b = 127.204624\n",
+ "epoch 2: loss = 2650260.562182, a = 6.564882, b = 142.423411\n",
+ "epoch 3: loss = 2610244.478756, a = 8.443497, b = 148.704446\n",
+ "epoch 4: loss = 2601826.873313, a = 10.321163, b = 151.296317\n",
+ "epoch 5: loss = 2598022.583256, a = 12.196235, b = 152.365440\n",
+ "epoch 6: loss = 2594693.583475, a = 14.068035, b = 152.806033\n",
+ "epoch 7: loss = 2591324.277053, a = 15.936290, b = 152.987193\n",
+ "epoch 8: loss = 2587904.879022, a = 17.800890, b = 153.061271\n",
+ "epoch 9: loss = 2584465.875668, a = 19.661796, b = 153.091151\n",
+ "epoch 10: loss = 2581025.689621, a = 21.518994, b = 153.102788\n",
+ "epoch 11: loss = 2577592.886376, a = 23.372484, b = 153.106897\n",
+ "epoch 12: loss = 2574171.135769, a = 25.222270, b = 153.107901\n",
+ "epoch 13: loss = 2570761.947715, a = 27.068358, b = 153.107623\n",
+ "epoch 14: loss = 2567365.917653, a = 28.910755, b = 153.106819\n",
+ "epoch 15: loss = 2563983.260031, a = 30.749468, b = 153.105798\n",
+ "epoch 16: loss = 2560614.031657, a = 32.584504, b = 153.104690\n",
+ "epoch 17: loss = 2557258.224357, a = 34.415871, b = 153.103546\n",
+ "epoch 18: loss = 2553915.803272, a = 36.243576, b = 153.102390\n",
+ "epoch 19: loss = 2550586.722666, a = 38.067626, b = 153.101229\n",
+ "epoch 20: loss = 2547270.932442, a = 39.888028, b = 153.100068\n",
+ "epoch 21: loss = 2543968.380830, a = 41.704790, b = 153.098909\n",
+ "epoch 22: loss = 2540679.015496, a = 43.517919, b = 153.097751\n",
+ "epoch 23: loss = 2537402.783996, a = 45.327423, b = 153.096595\n",
+ "epoch 24: loss = 2534139.633964, a = 47.133308, b = 153.095442\n",
+ "epoch 25: loss = 2530889.513189, a = 48.935582, b = 153.094291\n",
+ "epoch 26: loss = 2527652.369647, a = 50.734252, b = 153.093142\n",
+ "epoch 27: loss = 2524428.151512, a = 52.529326, b = 153.091995\n",
+ "epoch 28: loss = 2521216.807162, a = 54.320809, b = 153.090851\n",
+ "epoch 29: loss = 2518018.285178, a = 56.108711, b = 153.089709\n",
+ "epoch 30: loss = 2514832.534347, a = 57.893037, b = 153.088570\n",
+ "epoch 31: loss = 2511659.503661, a = 59.673795, b = 153.087432\n",
+ "epoch 32: loss = 2508499.142314, a = 61.450992, b = 153.086297\n",
+ "epoch 33: loss = 2505351.399704, a = 63.224636, b = 153.085164\n",
+ "epoch 34: loss = 2502216.225431, a = 64.994732, b = 153.084034\n",
+ "epoch 35: loss = 2499093.569295, a = 66.761289, b = 153.082906\n",
+ "epoch 36: loss = 2495983.381300, a = 68.524314, b = 153.081780\n",
+ "epoch 37: loss = 2492885.611645, a = 70.283813, b = 153.080656\n",
+ "epoch 38: loss = 2489800.210732, a = 72.039794, b = 153.079534\n",
+ "epoch 39: loss = 2486727.129159, a = 73.792263, b = 153.078415\n",
+ "epoch 40: loss = 2483666.317722, a = 75.541228, b = 153.077298\n",
+ "epoch 41: loss = 2480617.727412, a = 77.286695, b = 153.076183\n",
+ "epoch 42: loss = 2477581.309419, a = 79.028673, b = 153.075070\n",
+ "epoch 43: loss = 2474557.015125, a = 80.767166, b = 153.073960\n",
+ "epoch 44: loss = 2471544.796108, a = 82.502184, b = 153.072852\n",
+ "epoch 45: loss = 2468544.604139, a = 84.233732, b = 153.071746\n",
+ "epoch 46: loss = 2465556.391180, a = 85.961817, b = 153.070642\n",
+ "epoch 47: loss = 2462580.109388, a = 87.686447, b = 153.069541\n",
+ "epoch 48: loss = 2459615.711109, a = 89.407628, b = 153.068441\n",
+ "epoch 49: loss = 2456663.148878, a = 91.125368, b = 153.067344\n",
+ "epoch 50: loss = 2453722.375424, a = 92.839672, b = 153.066249\n",
+ "epoch 51: loss = 2450793.343662, a = 94.550548, b = 153.065157\n",
+ "epoch 52: loss = 2447876.006693, a = 96.258004, b = 153.064066\n",
+ "epoch 53: loss = 2444970.317810, a = 97.962044, b = 153.062978\n",
+ "epoch 54: loss = 2442076.230490, a = 99.662678, b = 153.061892\n",
+ "epoch 55: loss = 2439193.698395, a = 101.359910, b = 153.060808\n",
+ "epoch 56: loss = 2436322.675374, a = 103.053749, b = 153.059726\n",
+ "epoch 57: loss = 2433463.115460, a = 104.744201, b = 153.058646\n",
+ "epoch 58: loss = 2430614.972868, a = 106.431272, b = 153.057569\n",
+ "epoch 59: loss = 2427778.201998, a = 108.114970, b = 153.056493\n",
+ "epoch 60: loss = 2424952.757431, a = 109.795301, b = 153.055420\n",
+ "epoch 61: loss = 2422138.593930, a = 111.472271, b = 153.054349\n",
+ "epoch 62: loss = 2419335.666438, a = 113.145889, b = 153.053280\n",
+ "epoch 63: loss = 2416543.930078, a = 114.816160, b = 153.052213\n",
+ "epoch 64: loss = 2413763.340154, a = 116.483090, b = 153.051148\n",
+ "epoch 65: loss = 2410993.852146, a = 118.146688, b = 153.050086\n",
+ "epoch 66: loss = 2408235.421713, a = 119.806958, b = 153.049026\n",
+ "epoch 67: loss = 2405488.004692, a = 121.463909, b = 153.047967\n",
+ "epoch 68: loss = 2402751.557095, a = 123.117547, b = 153.046911\n",
+ "epoch 69: loss = 2400026.035111, a = 124.767877, b = 153.045857\n",
+ "epoch 70: loss = 2397311.395102, a = 126.414908, b = 153.044805\n",
+ "epoch 71: loss = 2394607.593607, a = 128.058645, b = 153.043755\n",
+ "epoch 72: loss = 2391914.587336, a = 129.699095, b = 153.042707\n",
+ "epoch 73: loss = 2389232.333175, a = 131.336265, b = 153.041662\n",
+ "epoch 74: loss = 2386560.788178, a = 132.970161, b = 153.040618\n",
+ "epoch 75: loss = 2383899.909575, a = 134.600789, b = 153.039577\n",
+ "epoch 76: loss = 2381249.654764, a = 136.228157, b = 153.038537\n",
+ "epoch 77: loss = 2378609.981313, a = 137.852271, b = 153.037500\n",
+ "epoch 78: loss = 2375980.846962, a = 139.473137, b = 153.036465\n",
+ "epoch 79: loss = 2373362.209618, a = 141.090762, b = 153.035432\n",
+ "epoch 80: loss = 2370754.027356, a = 142.705152, b = 153.034401\n",
+ "epoch 81: loss = 2368156.258420, a = 144.316314, b = 153.033371\n",
+ "epoch 82: loss = 2365568.861218, a = 145.924254, b = 153.032344\n",
+ "epoch 83: loss = 2362991.794327, a = 147.528979, b = 153.031320\n",
+ "epoch 84: loss = 2360425.016488, a = 149.130495, b = 153.030297\n",
+ "epoch 85: loss = 2357868.486607, a = 150.728809, b = 153.029276\n",
+ "epoch 86: loss = 2355322.163754, a = 152.323926, b = 153.028257\n",
+ "epoch 87: loss = 2352786.007164, a = 153.915853, b = 153.027240\n",
+ "epoch 88: loss = 2350259.976233, a = 155.504598, b = 153.026226\n",
+ "epoch 89: loss = 2347744.030520, a = 157.090165, b = 153.025213\n",
+ "epoch 90: loss = 2345238.129745, a = 158.672562, b = 153.024202\n",
+ "epoch 91: loss = 2342742.233790, a = 160.251794, b = 153.023194\n",
+ "epoch 92: loss = 2340256.302696, a = 161.827869, b = 153.022187\n",
+ "epoch 93: loss = 2337780.296663, a = 163.400791, b = 153.021182\n",
+ "epoch 94: loss = 2335314.176054, a = 164.970569, b = 153.020180\n",
+ "epoch 95: loss = 2332857.901385, a = 166.537207, b = 153.019179\n",
+ "epoch 96: loss = 2330411.433334, a = 168.100713, b = 153.018180\n",
+ "epoch 97: loss = 2327974.732732, a = 169.661092, b = 153.017184\n",
+ "epoch 98: loss = 2325547.760572, a = 171.218351, b = 153.016189\n",
+ "epoch 99: loss = 2323130.477996, a = 172.772496, b = 153.015197\n",
+ "epoch 100: loss = 2320722.846308, a = 174.323534, b = 153.014206\n",
+ "epoch 101: loss = 2318324.826961, a = 175.871469, b = 153.013217\n",
+ "epoch 102: loss = 2315936.381566, a = 177.416310, b = 153.012231\n",
+ "epoch 103: loss = 2313557.471885, a = 178.958061, b = 153.011246\n",
+ "epoch 104: loss = 2311188.059833, a = 180.496729, b = 153.010263\n",
+ "epoch 105: loss = 2308828.107479, a = 182.032320, b = 153.009282\n",
+ "epoch 106: loss = 2306477.577040, a = 183.564841, b = 153.008304\n",
+ "epoch 107: loss = 2304136.430888, a = 185.094297, b = 153.007327\n",
+ "epoch 108: loss = 2301804.631543, a = 186.620695, b = 153.006352\n",
+ "epoch 109: loss = 2299482.141674, a = 188.144040, b = 153.005379\n",
+ "epoch 110: loss = 2297168.924101, a = 189.664339, b = 153.004408\n",
+ "epoch 111: loss = 2294864.941791, a = 191.181598, b = 153.003439\n",
+ "epoch 112: loss = 2292570.157861, a = 192.695823, b = 153.002472\n",
+ "epoch 113: loss = 2290284.535573, a = 194.207021, b = 153.001506\n",
+ "epoch 114: loss = 2288008.038337, a = 195.715196, b = 153.000543\n",
+ "epoch 115: loss = 2285740.629708, a = 197.220355, b = 152.999582\n",
+ "epoch 116: loss = 2283482.273389, a = 198.722505, b = 152.998622\n",
+ "epoch 117: loss = 2281232.933225, a = 200.221651, b = 152.997665\n",
+ "epoch 118: loss = 2278992.573208, a = 201.717799, b = 152.996709\n",
+ "epoch 119: loss = 2276761.157473, a = 203.210955, b = 152.995756\n",
+ "epoch 120: loss = 2274538.650297, a = 204.701125, b = 152.994804\n",
+ "epoch 121: loss = 2272325.016100, a = 206.188316, b = 152.993854\n",
+ "epoch 122: loss = 2270120.219447, a = 207.672532, b = 152.992906\n",
+ "epoch 123: loss = 2267924.225041, a = 209.153781, b = 152.991960\n",
+ "epoch 124: loss = 2265736.997727, a = 210.632068, b = 152.991016\n",
+ "epoch 125: loss = 2263558.502491, a = 212.107398, b = 152.990074\n",
+ "epoch 126: loss = 2261388.704460, a = 213.579779, b = 152.989133\n",
+ "epoch 127: loss = 2259227.568898, a = 215.049215, b = 152.988195\n",
+ "epoch 128: loss = 2257075.061208, a = 216.515713, b = 152.987258\n",
+ "epoch 129: loss = 2254931.146933, a = 217.979278, b = 152.986323\n",
+ "epoch 130: loss = 2252795.791751, a = 219.439916, b = 152.985390\n",
+ "epoch 131: loss = 2250668.961481, a = 220.897634, b = 152.984459\n",
+ "epoch 132: loss = 2248550.622075, a = 222.352437, b = 152.983530\n",
+ "epoch 133: loss = 2246440.739622, a = 223.804331, b = 152.982603\n",
+ "epoch 134: loss = 2244339.280347, a = 225.253321, b = 152.981677\n",
+ "epoch 135: loss = 2242246.210609, a = 226.699414, b = 152.980754\n",
+ "epoch 136: loss = 2240161.496903, a = 228.142616, b = 152.979832\n",
+ "epoch 137: loss = 2238085.105855, a = 229.582931, b = 152.978912\n",
+ "epoch 138: loss = 2236017.004229, a = 231.020366, b = 152.977994\n",
+ "epoch 139: loss = 2233957.158916, a = 232.454927, b = 152.977078\n",
+ "epoch 140: loss = 2231905.536944, a = 233.886619, b = 152.976163\n",
+ "epoch 141: loss = 2229862.105469, a = 235.315448, b = 152.975251\n",
+ "epoch 142: loss = 2227826.831783, a = 236.741420, b = 152.974340\n",
+ "epoch 143: loss = 2225799.683303, a = 238.164541, b = 152.973431\n",
+ "epoch 144: loss = 2223780.627579, a = 239.584815, b = 152.972524\n",
+ "epoch 145: loss = 2221769.632292, a = 241.002250, b = 152.971619\n",
+ "epoch 146: loss = 2219766.665250, a = 242.416850, b = 152.970715\n",
+ "epoch 147: loss = 2217771.694390, a = 243.828622, b = 152.969813\n",
+ "epoch 148: loss = 2215784.687776, a = 245.237570, b = 152.968913\n",
+ "epoch 149: loss = 2213805.613603, a = 246.643701, b = 152.968015\n",
+ "epoch 150: loss = 2211834.440190, a = 248.047021, b = 152.967119\n",
+ "epoch 151: loss = 2209871.135983, a = 249.447534, b = 152.966225\n",
+ "epoch 152: loss = 2207915.669555, a = 250.845246, b = 152.965332\n",
+ "epoch 153: loss = 2205968.009603, a = 252.240164, b = 152.964441\n",
+ "epoch 154: loss = 2204028.124951, a = 253.632292, b = 152.963552\n",
+ "epoch 155: loss = 2202095.984547, a = 255.021636, b = 152.962664\n",
+ "epoch 156: loss = 2200171.557461, a = 256.408203, b = 152.961779\n",
+ "epoch 157: loss = 2198254.812889, a = 257.791996, b = 152.960895\n",
+ "epoch 158: loss = 2196345.720150, a = 259.173022, b = 152.960013\n",
+ "epoch 159: loss = 2194444.248684, a = 260.551287, b = 152.959133\n",
+ "epoch 160: loss = 2192550.368053, a = 261.926796, b = 152.958254\n",
+ "epoch 161: loss = 2190664.047943, a = 263.299554, b = 152.957377\n",
+ "epoch 162: loss = 2188785.258158, a = 264.669567, b = 152.956502\n",
+ "epoch 163: loss = 2186913.968625, a = 266.036841, b = 152.955629\n",
+ "epoch 164: loss = 2185050.149391, a = 267.401380, b = 152.954757\n",
+ "epoch 165: loss = 2183193.770620, a = 268.763191, b = 152.953888\n",
+ "epoch 166: loss = 2181344.802598, a = 270.122278, b = 152.953020\n",
+ "epoch 167: loss = 2179503.215730, a = 271.478648, b = 152.952153\n",
+ "epoch 168: loss = 2177668.980536, a = 272.832306, b = 152.951289\n",
+ "epoch 169: loss = 2175842.067656, a = 274.183256, b = 152.950426\n",
+ "epoch 170: loss = 2174022.447849, a = 275.531506, b = 152.949565\n",
+ "epoch 171: loss = 2172210.091986, a = 276.877059, b = 152.948705\n",
+ "epoch 172: loss = 2170404.971060, a = 278.219921, b = 152.947848\n",
+ "epoch 173: loss = 2168607.056175, a = 279.560099, b = 152.946992\n",
+ "epoch 174: loss = 2166816.318553, a = 280.897596, b = 152.946138\n",
+ "epoch 175: loss = 2165032.729530, a = 282.232419, b = 152.945285\n",
+ "epoch 176: loss = 2163256.260558, a = 283.564572, b = 152.944434\n",
+ "epoch 177: loss = 2161486.883202, a = 284.894062, b = 152.943585\n",
+ "epoch 178: loss = 2159724.569140, a = 286.220893, b = 152.942738\n",
+ "epoch 179: loss = 2157969.290163, a = 287.545071, b = 152.941892\n",
+ "epoch 180: loss = 2156221.018176, a = 288.866601, b = 152.941048\n",
+ "epoch 181: loss = 2154479.725196, a = 290.185489, b = 152.940205\n",
+ "epoch 182: loss = 2152745.383351, a = 291.501739, b = 152.939365\n",
+ "epoch 183: loss = 2151017.964881, a = 292.815357, b = 152.938526\n",
+ "epoch 184: loss = 2149297.442136, a = 294.126348, b = 152.937688\n",
+ "epoch 185: loss = 2147583.787577, a = 295.434718, b = 152.936853\n",
+ "epoch 186: loss = 2145876.973776, a = 296.740471, b = 152.936019\n",
+ "epoch 187: loss = 2144176.973412, a = 298.043614, b = 152.935186\n",
+ "epoch 188: loss = 2142483.759277, a = 299.344150, b = 152.934356\n",
+ "epoch 189: loss = 2140797.304267, a = 300.642086, b = 152.933527\n",
+ "epoch 190: loss = 2139117.581390, a = 301.937426, b = 152.932699\n",
+ "epoch 191: loss = 2137444.563760, a = 303.230176, b = 152.931874\n",
+ "epoch 192: loss = 2135778.224600, a = 304.520341, b = 152.931050\n",
+ "epoch 193: loss = 2134118.537237, a = 305.807926, b = 152.930227\n",
+ "epoch 194: loss = 2132465.475108, a = 307.092937, b = 152.929407\n",
+ "epoch 195: loss = 2130819.011754, a = 308.375378, b = 152.928588\n",
+ "epoch 196: loss = 2129179.120822, a = 309.655254, b = 152.927770\n",
+ "epoch 197: loss = 2127545.776064, a = 310.932571, b = 152.926954\n",
+ "epoch 198: loss = 2125918.951339, a = 312.207334, b = 152.926140\n",
+ "epoch 199: loss = 2124298.620607, a = 313.479547, b = 152.925328\n",
+ "epoch 200: loss = 2122684.757934, a = 314.749217, b = 152.924517\n",
+ "epoch 201: loss = 2121077.337490, a = 316.016348, b = 152.923707\n",
+ "epoch 202: loss = 2119476.333547, a = 317.280945, b = 152.922900\n",
+ "epoch 203: loss = 2117881.720480, a = 318.543013, b = 152.922094\n",
+ "epoch 204: loss = 2116293.472768, a = 319.802557, b = 152.921289\n",
+ "epoch 205: loss = 2114711.564989, a = 321.059583, b = 152.920486\n",
+ "epoch 206: loss = 2113135.971825, a = 322.314095, b = 152.919685\n",
+ "epoch 207: loss = 2111566.668058, a = 323.566099, b = 152.918885\n",
+ "epoch 208: loss = 2110003.628571, a = 324.815599, b = 152.918087\n",
+ "epoch 209: loss = 2108446.828347, a = 326.062600, b = 152.917291\n",
+ "epoch 210: loss = 2106896.242470, a = 327.307108, b = 152.916496\n",
+ "epoch 211: loss = 2105351.846122, a = 328.549127, b = 152.915703\n",
+ "epoch 212: loss = 2103813.614585, a = 329.788662, b = 152.914911\n",
+ "epoch 213: loss = 2102281.523241, a = 331.025719, b = 152.914121\n",
+ "epoch 214: loss = 2100755.547567, a = 332.260302, b = 152.913332\n",
+ "epoch 215: loss = 2099235.663141, a = 333.492417, b = 152.912545\n",
+ "epoch 216: loss = 2097721.845637, a = 334.722067, b = 152.911760\n",
+ "epoch 217: loss = 2096214.070828, a = 335.949259, b = 152.910976\n",
+ "epoch 218: loss = 2094712.314580, a = 337.173997, b = 152.910194\n",
+ "epoch 219: loss = 2093216.552860, a = 338.396285, b = 152.909413\n",
+ "epoch 220: loss = 2091726.761728, a = 339.616130, b = 152.908634\n",
+ "epoch 221: loss = 2090242.917340, a = 340.833535, b = 152.907857\n",
+ "epoch 222: loss = 2088764.995948, a = 342.048506, b = 152.907081\n",
+ "epoch 223: loss = 2087292.973899, a = 343.261047, b = 152.906306\n",
+ "epoch 224: loss = 2085826.827634, a = 344.471164, b = 152.905533\n",
+ "epoch 225: loss = 2084366.533687, a = 345.678860, b = 152.904762\n",
+ "epoch 226: loss = 2082912.068689, a = 346.884142, b = 152.903992\n",
+ "epoch 227: loss = 2081463.409360, a = 348.087014, b = 152.903224\n",
+ "epoch 228: loss = 2080020.532516, a = 349.287480, b = 152.902457\n",
+ "epoch 229: loss = 2078583.415065, a = 350.485545, b = 152.901692\n",
+ "epoch 230: loss = 2077152.034007, a = 351.681215, b = 152.900928\n",
+ "epoch 231: loss = 2075726.366435, a = 352.874494, b = 152.900166\n",
+ "epoch 232: loss = 2074306.389530, a = 354.065387, b = 152.899405\n",
+ "epoch 233: loss = 2072892.080568, a = 355.253899, b = 152.898646\n",
+ "epoch 234: loss = 2071483.416915, a = 356.440033, b = 152.897889\n",
+ "epoch 235: loss = 2070080.376026, a = 357.623796, b = 152.897133\n",
+ "epoch 236: loss = 2068682.935446, a = 358.805192, b = 152.896378\n",
+ "epoch 237: loss = 2067291.072812, a = 359.984226, b = 152.895625\n",
+ "epoch 238: loss = 2065904.765847, a = 361.160901, b = 152.894874\n",
+ "epoch 239: loss = 2064523.992367, a = 362.335224, b = 152.894124\n",
+ "epoch 240: loss = 2063148.730273, a = 363.507199, b = 152.893375\n",
+ "epoch 241: loss = 2061778.957556, a = 364.676830, b = 152.892628\n",
+ "epoch 242: loss = 2060414.652294, a = 365.844122, b = 152.891882\n",
+ "epoch 243: loss = 2059055.792654, a = 367.009079, b = 152.891138\n",
+ "epoch 244: loss = 2057702.356890, a = 368.171708, b = 152.890396\n",
+ "epoch 245: loss = 2056354.323340, a = 369.332011, b = 152.889655\n",
+ "epoch 246: loss = 2055011.670433, a = 370.489995, b = 152.888915\n",
+ "epoch 247: loss = 2053674.376681, a = 371.645662, b = 152.888177\n",
+ "epoch 248: loss = 2052342.420683, a = 372.799019, b = 152.887440\n",
+ "epoch 249: loss = 2051015.781122, a = 373.950069, b = 152.886705\n",
+ "epoch 250: loss = 2049694.436769, a = 375.098818, b = 152.885972\n",
+ "epoch 251: loss = 2048378.366478, a = 376.245269, b = 152.885239\n",
+ "epoch 252: loss = 2047067.549187, a = 377.389428, b = 152.884509\n",
+ "epoch 253: loss = 2045761.963919, a = 378.531300, b = 152.883779\n",
+ "epoch 254: loss = 2044461.589780, a = 379.670887, b = 152.883051\n",
+ "epoch 255: loss = 2043166.405962, a = 380.808196, b = 152.882325\n",
+ "epoch 256: loss = 2041876.391735, a = 381.943231, b = 152.881600\n",
+ "epoch 257: loss = 2040591.526458, a = 383.075996, b = 152.880877\n",
+ "epoch 258: loss = 2039311.789567, a = 384.206496, b = 152.880154\n",
+ "epoch 259: loss = 2038037.160585, a = 385.334735, b = 152.879434\n",
+ "epoch 260: loss = 2036767.619112, a = 386.460718, b = 152.878715\n",
+ "epoch 261: loss = 2035503.144833, a = 387.584449, b = 152.877997\n",
+ "epoch 262: loss = 2034243.717512, a = 388.705934, b = 152.877281\n",
+ "epoch 263: loss = 2032989.316996, a = 389.825176, b = 152.876566\n",
+ "epoch 264: loss = 2031739.923211, a = 390.942179, b = 152.875852\n",
+ "epoch 265: loss = 2030495.516162, a = 392.056949, b = 152.875140\n",
+ "epoch 266: loss = 2029256.075938, a = 393.169490, b = 152.874430\n",
+ "epoch 267: loss = 2028021.582702, a = 394.279807, b = 152.873721\n",
+ "epoch 268: loss = 2026792.016702, a = 395.387902, b = 152.873013\n",
+ "epoch 269: loss = 2025567.358259, a = 396.493783, b = 152.872307\n",
+ "epoch 270: loss = 2024347.587778, a = 397.597451, b = 152.871602\n",
+ "epoch 271: loss = 2023132.685738, a = 398.698913, b = 152.870898\n",
+ "epoch 272: loss = 2021922.632700, a = 399.798172, b = 152.870196\n",
+ "epoch 273: loss = 2020717.409298, a = 400.895233, b = 152.869495\n",
+ "epoch 274: loss = 2019516.996248, a = 401.990100, b = 152.868796\n",
+ "epoch 275: loss = 2018321.374339, a = 403.082778, b = 152.868098\n",
+ "epoch 276: loss = 2017130.524440, a = 404.173271, b = 152.867402\n",
+ "epoch 277: loss = 2015944.427495, a = 405.261583, b = 152.866707\n",
+ "epoch 278: loss = 2014763.064523, a = 406.347719, b = 152.866013\n",
+ "epoch 279: loss = 2013586.416620, a = 407.431683, b = 152.865321\n",
+ "epoch 280: loss = 2012414.464959, a = 408.513480, b = 152.864630\n",
+ "epoch 281: loss = 2011247.190786, a = 409.593113, b = 152.863940\n",
+ "epoch 282: loss = 2010084.575421, a = 410.670588, b = 152.863252\n",
+ "epoch 283: loss = 2008926.600262, a = 411.745907, b = 152.862565\n",
+ "epoch 284: loss = 2007773.246779, a = 412.819077, b = 152.861880\n",
+ "epoch 285: loss = 2006624.496517, a = 413.890100, b = 152.861196\n",
+ "epoch 286: loss = 2005480.331093, a = 414.958982, b = 152.860513\n",
+ "epoch 287: loss = 2004340.732199, a = 416.025727, b = 152.859832\n",
+ "epoch 288: loss = 2003205.681600, a = 417.090338, b = 152.859152\n",
+ "epoch 289: loss = 2002075.161134, a = 418.152820, b = 152.858473\n",
+ "epoch 290: loss = 2000949.152710, a = 419.213178, b = 152.857796\n",
+ "epoch 291: loss = 1999827.638312, a = 420.271415, b = 152.857120\n",
+ "epoch 292: loss = 1998710.599993, a = 421.327537, b = 152.856445\n",
+ "epoch 293: loss = 1997598.019879, a = 422.381546, b = 152.855772\n",
+ "epoch 294: loss = 1996489.880169, a = 423.433448, b = 152.855100\n",
+ "epoch 295: loss = 1995386.163130, a = 424.483246, b = 152.854430\n",
+ "epoch 296: loss = 1994286.851102, a = 425.530945, b = 152.853761\n",
+ "epoch 297: loss = 1993191.926495, a = 426.576549, b = 152.853093\n",
+ "epoch 298: loss = 1992101.371788, a = 427.620062, b = 152.852426\n",
+ "epoch 299: loss = 1991015.169533, a = 428.661489, b = 152.851761\n",
+ "epoch 300: loss = 1989933.302349, a = 429.700833, b = 152.851097\n",
+ "epoch 301: loss = 1988855.752925, a = 430.738098, b = 152.850435\n",
+ "epoch 302: loss = 1987782.504019, a = 431.773290, b = 152.849774\n",
+ "epoch 303: loss = 1986713.538460, a = 432.806411, b = 152.849114\n",
+ "epoch 304: loss = 1985648.839142, a = 433.837466, b = 152.848455\n",
+ "epoch 305: loss = 1984588.389031, a = 434.866460, b = 152.847798\n",
+ "epoch 306: loss = 1983532.171157, a = 435.893396, b = 152.847142\n",
+ "epoch 307: loss = 1982480.168622, a = 436.918279, b = 152.846488\n",
+ "epoch 308: loss = 1981432.364593, a = 437.941112, b = 152.845834\n",
+ "epoch 309: loss = 1980388.742304, a = 438.961900, b = 152.845182\n",
+ "epoch 310: loss = 1979349.285057, a = 439.980646, b = 152.844532\n",
+ "epoch 311: loss = 1978313.976221, a = 440.997355, b = 152.843882\n",
+ "epoch 312: loss = 1977282.799230, a = 442.012032, b = 152.843234\n",
+ "epoch 313: loss = 1976255.737586, a = 443.024679, b = 152.842588\n",
+ "epoch 314: loss = 1975232.774855, a = 444.035301, b = 152.841942\n",
+ "epoch 315: loss = 1974213.894670, a = 445.043903, b = 152.841298\n",
+ "epoch 316: loss = 1973199.080729, a = 446.050487, b = 152.840655\n",
+ "epoch 317: loss = 1972188.316794, a = 447.055059, b = 152.840013\n",
+ "epoch 318: loss = 1971181.586695, a = 448.057622, b = 152.839373\n",
+ "epoch 319: loss = 1970178.874323, a = 449.058180, b = 152.838734\n",
+ "epoch 320: loss = 1969180.163634, a = 450.056737, b = 152.838096\n",
+ "epoch 321: loss = 1968185.438651, a = 451.053298, b = 152.837460\n",
+ "epoch 322: loss = 1967194.683457, a = 452.047865, b = 152.836824\n",
+ "epoch 323: loss = 1966207.882201, a = 453.040444, b = 152.836190\n",
+ "epoch 324: loss = 1965225.019095, a = 454.031038, b = 152.835558\n",
+ "epoch 325: loss = 1964246.078413, a = 455.019652, b = 152.834926\n",
+ "epoch 326: loss = 1963271.044493, a = 456.006288, b = 152.834296\n",
+ "epoch 327: loss = 1962299.901734, a = 456.990951, b = 152.833667\n",
+ "epoch 328: loss = 1961332.634599, a = 457.973646, b = 152.833040\n",
+ "epoch 329: loss = 1960369.227613, a = 458.954375, b = 152.832413\n",
+ "epoch 330: loss = 1959409.665362, a = 459.933143, b = 152.831788\n",
+ "epoch 331: loss = 1958453.932493, a = 460.909954, b = 152.831164\n",
+ "epoch 332: loss = 1957502.013716, a = 461.884812, b = 152.830542\n",
+ "epoch 333: loss = 1956553.893800, a = 462.857720, b = 152.829920\n",
+ "epoch 334: loss = 1955609.557577, a = 463.828683, b = 152.829300\n",
+ "epoch 335: loss = 1954668.989939, a = 464.797704, b = 152.828681\n",
+ "epoch 336: loss = 1953732.175837, a = 465.764787, b = 152.828063\n",
+ "epoch 337: loss = 1952799.100283, a = 466.729937, b = 152.827447\n",
+ "epoch 338: loss = 1951869.748350, a = 467.693157, b = 152.826832\n",
+ "epoch 339: loss = 1950944.105168, a = 468.654450, b = 152.826218\n",
+ "epoch 340: loss = 1950022.155929, a = 469.613821, b = 152.825605\n",
+ "epoch 341: loss = 1949103.885883, a = 470.571274, b = 152.824994\n",
+ "epoch 342: loss = 1948189.280339, a = 471.526812, b = 152.824383\n",
+ "epoch 343: loss = 1947278.324664, a = 472.480440, b = 152.823774\n",
+ "epoch 344: loss = 1946371.004285, a = 473.432160, b = 152.823166\n",
+ "epoch 345: loss = 1945467.304686, a = 474.381978, b = 152.822560\n",
+ "epoch 346: loss = 1944567.211409, a = 475.329896, b = 152.821954\n",
+ "epoch 347: loss = 1943670.710054, a = 476.275919, b = 152.821350\n",
+ "epoch 348: loss = 1942777.786279, a = 477.220049, b = 152.820747\n",
+ "epoch 349: loss = 1941888.425799, a = 478.162292, b = 152.820145\n",
+ "epoch 350: loss = 1941002.614385, a = 479.102651, b = 152.819545\n",
+ "epoch 351: loss = 1940120.337867, a = 480.041129, b = 152.818945\n",
+ "epoch 352: loss = 1939241.582129, a = 480.977731, b = 152.818347\n",
+ "epoch 353: loss = 1938366.333114, a = 481.912460, b = 152.817750\n",
+ "epoch 354: loss = 1937494.576819, a = 482.845319, b = 152.817154\n",
+ "epoch 355: loss = 1936626.299297, a = 483.776313, b = 152.816560\n",
+ "epoch 356: loss = 1935761.486660, a = 484.705446, b = 152.815966\n",
+ "epoch 357: loss = 1934900.125071, a = 485.632721, b = 152.815374\n",
+ "epoch 358: loss = 1934042.200750, a = 486.558141, b = 152.814783\n",
+ "epoch 359: loss = 1933187.699974, a = 487.481711, b = 152.814193\n",
+ "epoch 360: loss = 1932336.609071, a = 488.403434, b = 152.813604\n",
+ "epoch 361: loss = 1931488.914427, a = 489.323313, b = 152.813017\n",
+ "epoch 362: loss = 1930644.602481, a = 490.241354, b = 152.812430\n",
+ "epoch 363: loss = 1929803.659727, a = 491.157558, b = 152.811845\n",
+ "epoch 364: loss = 1928966.072710, a = 492.071931, b = 152.811261\n",
+ "epoch 365: loss = 1928131.828033, a = 492.984475, b = 152.810678\n",
+ "epoch 366: loss = 1927300.912349, a = 493.895194, b = 152.810097\n",
+ "epoch 367: loss = 1926473.312366, a = 494.804092, b = 152.809516\n",
+ "epoch 368: loss = 1925649.014846, a = 495.711173, b = 152.808937\n",
+ "epoch 369: loss = 1924828.006601, a = 496.616440, b = 152.808359\n",
+ "epoch 370: loss = 1924010.274499, a = 497.519896, b = 152.807782\n",
+ "epoch 371: loss = 1923195.805457, a = 498.421546, b = 152.807206\n",
+ "epoch 372: loss = 1922384.586448, a = 499.321393, b = 152.806631\n",
+ "epoch 373: loss = 1921576.604494, a = 500.219440, b = 152.806057\n",
+ "epoch 374: loss = 1920771.846670, a = 501.115692, b = 152.805485\n",
+ "epoch 375: loss = 1919970.300103, a = 502.010152, b = 152.804914\n",
+ "epoch 376: loss = 1919171.951971, a = 502.902823, b = 152.804344\n",
+ "epoch 377: loss = 1918376.789502, a = 503.793708, b = 152.803775\n",
+ "epoch 378: loss = 1917584.799978, a = 504.682813, b = 152.803207\n",
+ "epoch 379: loss = 1916795.970729, a = 505.570139, b = 152.802640\n",
+ "epoch 380: loss = 1916010.289136, a = 506.455691, b = 152.802074\n",
+ "epoch 381: loss = 1915227.742632, a = 507.339473, b = 152.801510\n",
+ "epoch 382: loss = 1914448.318700, a = 508.221487, b = 152.800947\n",
+ "epoch 383: loss = 1913672.004870, a = 509.101737, b = 152.800384\n",
+ "epoch 384: loss = 1912898.788726, a = 509.980227, b = 152.799823\n",
+ "epoch 385: loss = 1912128.657898, a = 510.856960, b = 152.799263\n",
+ "epoch 386: loss = 1911361.600068, a = 511.731940, b = 152.798704\n",
+ "epoch 387: loss = 1910597.602966, a = 512.605171, b = 152.798147\n",
+ "epoch 388: loss = 1909836.654372, a = 513.476655, b = 152.797590\n",
+ "epoch 389: loss = 1909078.742112, a = 514.346397, b = 152.797035\n",
+ "epoch 390: loss = 1908323.854064, a = 515.214399, b = 152.796480\n",
+ "epoch 391: loss = 1907571.978154, a = 516.080666, b = 152.795927\n",
+ "epoch 392: loss = 1906823.102353, a = 516.945201, b = 152.795375\n",
+ "epoch 393: loss = 1906077.214684, a = 517.808006, b = 152.794824\n",
+ "epoch 394: loss = 1905334.303215, a = 518.669087, b = 152.794274\n",
+ "epoch 395: loss = 1904594.356064, a = 519.528445, b = 152.793725\n",
+ "epoch 396: loss = 1903857.361395, a = 520.386085, b = 152.793177\n",
+ "epoch 397: loss = 1903123.307419, a = 521.242011, b = 152.792630\n",
+ "epoch 398: loss = 1902392.182395, a = 522.096224, b = 152.792085\n",
+ "epoch 399: loss = 1901663.974628, a = 522.948729, b = 152.791540\n",
+ "epoch 400: loss = 1900938.672471, a = 523.799530, b = 152.790997\n",
+ "epoch 401: loss = 1900216.264323, a = 524.648629, b = 152.790455\n",
+ "epoch 402: loss = 1899496.738628, a = 525.496031, b = 152.789913\n",
+ "epoch 403: loss = 1898780.083878, a = 526.341738, b = 152.789373\n",
+ "epoch 404: loss = 1898066.288609, a = 527.185753, b = 152.788834\n",
+ "epoch 405: loss = 1897355.341406, a = 528.028081, b = 152.788296\n",
+ "epoch 406: loss = 1896647.230897, a = 528.868725, b = 152.787759\n",
+ "epoch 407: loss = 1895941.945754, a = 529.707688, b = 152.787223\n",
+ "epoch 408: loss = 1895239.474699, a = 530.544973, b = 152.786689\n",
+ "epoch 409: loss = 1894539.806495, a = 531.380583, b = 152.786155\n",
+ "epoch 410: loss = 1893842.929951, a = 532.214523, b = 152.785622\n",
+ "epoch 411: loss = 1893148.833922, a = 533.046795, b = 152.785091\n",
+ "epoch 412: loss = 1892457.507305, a = 533.877403, b = 152.784560\n",
+ "epoch 413: loss = 1891768.939043, a = 534.706350, b = 152.784031\n",
+ "epoch 414: loss = 1891083.118123, a = 535.533639, b = 152.783502\n",
+ "epoch 415: loss = 1890400.033577, a = 536.359274, b = 152.782975\n",
+ "epoch 416: loss = 1889719.674478, a = 537.183258, b = 152.782449\n",
+ "epoch 417: loss = 1889042.029945, a = 538.005595, b = 152.781924\n",
+ "epoch 418: loss = 1888367.089140, a = 538.826287, b = 152.781399\n",
+ "epoch 419: loss = 1887694.841269, a = 539.645337, b = 152.780876\n",
+ "epoch 420: loss = 1887025.275578, a = 540.462750, b = 152.780354\n",
+ "epoch 421: loss = 1886358.381359, a = 541.278529, b = 152.779833\n",
+ "epoch 422: loss = 1885694.147947, a = 542.092676, b = 152.779313\n",
+ "epoch 423: loss = 1885032.564717, a = 542.905195, b = 152.778794\n",
+ "epoch 424: loss = 1884373.621089, a = 543.716089, b = 152.778276\n",
+ "epoch 425: loss = 1883717.306523, a = 544.525362, b = 152.777759\n",
+ "epoch 426: loss = 1883063.610524, a = 545.333017, b = 152.777244\n",
+ "epoch 427: loss = 1882412.522636, a = 546.139056, b = 152.776729\n",
+ "epoch 428: loss = 1881764.032446, a = 546.943484, b = 152.776215\n",
+ "epoch 429: loss = 1881118.129583, a = 547.746303, b = 152.775702\n",
+ "epoch 430: loss = 1880474.803717, a = 548.547517, b = 152.775190\n",
+ "epoch 431: loss = 1879834.044558, a = 549.347128, b = 152.774680\n",
+ "epoch 432: loss = 1879195.841860, a = 550.145141, b = 152.774170\n",
+ "epoch 433: loss = 1878560.185416, a = 550.941558, b = 152.773661\n",
+ "epoch 434: loss = 1877927.065059, a = 551.736382, b = 152.773154\n",
+ "epoch 435: loss = 1877296.470664, a = 552.529617, b = 152.772647\n",
+ "epoch 436: loss = 1876668.392146, a = 553.321265, b = 152.772141\n",
+ "epoch 437: loss = 1876042.819461, a = 554.111331, b = 152.771637\n",
+ "epoch 438: loss = 1875419.742604, a = 554.899817, b = 152.771133\n",
+ "epoch 439: loss = 1874799.151611, a = 555.686726, b = 152.770631\n",
+ "epoch 440: loss = 1874181.036556, a = 556.472061, b = 152.770129\n",
+ "epoch 441: loss = 1873565.387555, a = 557.255826, b = 152.769629\n",
+ "epoch 442: loss = 1872952.194761, a = 558.038024, b = 152.769129\n",
+ "epoch 443: loss = 1872341.448369, a = 558.818658, b = 152.768630\n",
+ "epoch 444: loss = 1871733.138612, a = 559.597731, b = 152.768133\n",
+ "epoch 445: loss = 1871127.255760, a = 560.375245, b = 152.767636\n",
+ "epoch 446: loss = 1870523.790126, a = 561.151205, b = 152.767141\n",
+ "epoch 447: loss = 1869922.732057, a = 561.925614, b = 152.766646\n",
+ "epoch 448: loss = 1869324.071943, a = 562.698474, b = 152.766152\n",
+ "epoch 449: loss = 1868727.800209, a = 563.469788, b = 152.765660\n",
+ "epoch 450: loss = 1868133.907320, a = 564.239560, b = 152.765168\n",
+ "epoch 451: loss = 1867542.383779, a = 565.007792, b = 152.764677\n",
+ "epoch 452: loss = 1866953.220126, a = 565.774489, b = 152.764188\n",
+ "epoch 453: loss = 1866366.406939, a = 566.539652, b = 152.763699\n",
+ "epoch 454: loss = 1865781.934835, a = 567.303285, b = 152.763211\n",
+ "epoch 455: loss = 1865199.794467, a = 568.065392, b = 152.762724\n",
+ "epoch 456: loss = 1864619.976525, a = 568.825974, b = 152.762239\n",
+ "epoch 457: loss = 1864042.471739, a = 569.585035, b = 152.761754\n",
+ "epoch 458: loss = 1863467.270872, a = 570.342579, b = 152.761270\n",
+ "epoch 459: loss = 1862894.364726, a = 571.098607, b = 152.760787\n",
+ "epoch 460: loss = 1862323.744141, a = 571.853124, b = 152.760305\n",
+ "epoch 461: loss = 1861755.399991, a = 572.606132, b = 152.759824\n",
+ "epoch 462: loss = 1861189.323188, a = 573.357635, b = 152.759344\n",
+ "epoch 463: loss = 1860625.504680, a = 574.107634, b = 152.758865\n",
+ "epoch 464: loss = 1860063.935451, a = 574.856134, b = 152.758387\n",
+ "epoch 465: loss = 1859504.606521, a = 575.603137, b = 152.757910\n",
+ "epoch 466: loss = 1858947.508946, a = 576.348646, b = 152.757434\n",
+ "epoch 467: loss = 1858392.633818, a = 577.092665, b = 152.756959\n",
+ "epoch 468: loss = 1857839.972264, a = 577.835195, b = 152.756485\n",
+ "epoch 469: loss = 1857289.515447, a = 578.576241, b = 152.756011\n",
+ "epoch 470: loss = 1856741.254564, a = 579.315805, b = 152.755539\n",
+ "epoch 471: loss = 1856195.180850, a = 580.053891, b = 152.755067\n",
+ "epoch 472: loss = 1855651.285571, a = 580.790500, b = 152.754597\n",
+ "epoch 473: loss = 1855109.560032, a = 581.525636, b = 152.754127\n",
+ "epoch 474: loss = 1854569.995569, a = 582.259302, b = 152.753659\n",
+ "epoch 475: loss = 1854032.583556, a = 582.991501, b = 152.753191\n",
+ "epoch 476: loss = 1853497.315398, a = 583.722236, b = 152.752725\n",
+ "epoch 477: loss = 1852964.182538, a = 584.451510, b = 152.752259\n",
+ "epoch 478: loss = 1852433.176450, a = 585.179326, b = 152.751794\n",
+ "epoch 479: loss = 1851904.288645, a = 585.905686, b = 152.751330\n",
+ "epoch 480: loss = 1851377.510664, a = 586.630593, b = 152.750867\n",
+ "epoch 481: loss = 1850852.834086, a = 587.354051, b = 152.750405\n",
+ "epoch 482: loss = 1850330.250520, a = 588.076063, b = 152.749944\n",
+ "epoch 483: loss = 1849809.751612, a = 588.796630, b = 152.749484\n",
+ "epoch 484: loss = 1849291.329038, a = 589.515757, b = 152.749024\n",
+ "epoch 485: loss = 1848774.974510, a = 590.233445, b = 152.748566\n",
+ "epoch 486: loss = 1848260.679771, a = 590.949699, b = 152.748108\n",
+ "epoch 487: loss = 1847748.436598, a = 591.664520, b = 152.747652\n",
+ "epoch 488: loss = 1847238.236802, a = 592.377912, b = 152.747196\n",
+ "epoch 489: loss = 1846730.072224, a = 593.089877, b = 152.746741\n",
+ "epoch 490: loss = 1846223.934739, a = 593.800419, b = 152.746288\n",
+ "epoch 491: loss = 1845719.816255, a = 594.509540, b = 152.745835\n",
+ "epoch 492: loss = 1845217.708712, a = 595.217242, b = 152.745383\n",
+ "epoch 493: loss = 1844717.604082, a = 595.923530, b = 152.744932\n",
+ "epoch 494: loss = 1844219.494368, a = 596.628405, b = 152.744481\n",
+ "epoch 495: loss = 1843723.371607, a = 597.331871, b = 152.744032\n",
+ "epoch 496: loss = 1843229.227867, a = 598.033930, b = 152.743584\n",
+ "epoch 497: loss = 1842737.055246, a = 598.734585, b = 152.743136\n",
+ "epoch 498: loss = 1842246.845876, a = 599.433839, b = 152.742690\n",
+ "epoch 499: loss = 1841758.591920, a = 600.131695, b = 152.742244\n",
+ "epoch 500: loss = 1841272.285571, a = 600.828155, b = 152.741799\n",
+ "epoch 501: loss = 1840787.919054, a = 601.523222, b = 152.741355\n",
+ "epoch 502: loss = 1840305.484625, a = 602.216900, b = 152.740912\n",
+ "epoch 503: loss = 1839824.974571, a = 602.909191, b = 152.740470\n",
+ "epoch 504: loss = 1839346.381209, a = 603.600097, b = 152.740029\n",
+ "epoch 505: loss = 1838869.696888, a = 604.289621, b = 152.739588\n",
+ "epoch 506: loss = 1838394.913987, a = 604.977767, b = 152.739149\n",
+ "epoch 507: loss = 1837922.024916, a = 605.664537, b = 152.738710\n",
+ "epoch 508: loss = 1837451.022113, a = 606.349933, b = 152.738272\n",
+ "epoch 509: loss = 1836981.898050, a = 607.033959, b = 152.737835\n",
+ "epoch 510: loss = 1836514.645225, a = 607.716617, b = 152.737399\n",
+ "epoch 511: loss = 1836049.256168, a = 608.397910, b = 152.736964\n",
+ "epoch 512: loss = 1835585.723441, a = 609.077841, b = 152.736530\n",
+ "epoch 513: loss = 1835124.039631, a = 609.756412, b = 152.736097\n",
+ "epoch 514: loss = 1834664.197358, a = 610.433626, b = 152.735664\n",
+ "epoch 515: loss = 1834206.189270, a = 611.109486, b = 152.735232\n",
+ "epoch 516: loss = 1833750.008046, a = 611.783994, b = 152.734802\n",
+ "epoch 517: loss = 1833295.646392, a = 612.457153, b = 152.734372\n",
+ "epoch 518: loss = 1832843.097045, a = 613.128967, b = 152.733943\n",
+ "epoch 519: loss = 1832392.352771, a = 613.799437, b = 152.733514\n",
+ "epoch 520: loss = 1831943.406362, a = 614.468566, b = 152.733087\n",
+ "epoch 521: loss = 1831496.250642, a = 615.136357, b = 152.732660\n",
+ "epoch 522: loss = 1831050.878463, a = 615.802813, b = 152.732235\n",
+ "epoch 523: loss = 1830607.282705, a = 616.467937, b = 152.731810\n",
+ "epoch 524: loss = 1830165.456276, a = 617.131730, b = 152.731386\n",
+ "epoch 525: loss = 1829725.392114, a = 617.794196, b = 152.730963\n",
+ "epoch 526: loss = 1829287.083183, a = 618.455337, b = 152.730541\n",
+ "epoch 527: loss = 1828850.522477, a = 619.115156, b = 152.730119\n",
+ "epoch 528: loss = 1828415.703016, a = 619.773655, b = 152.729699\n",
+ "epoch 529: loss = 1827982.617850, a = 620.430838, b = 152.729279\n",
+ "epoch 530: loss = 1827551.260056, a = 621.086707, b = 152.728860\n",
+ "epoch 531: loss = 1827121.622739, a = 621.741264, b = 152.728442\n",
+ "epoch 532: loss = 1826693.699029, a = 622.394512, b = 152.728025\n",
+ "epoch 533: loss = 1826267.482087, a = 623.046454, b = 152.727608\n",
+ "epoch 534: loss = 1825842.965099, a = 623.697093, b = 152.727193\n",
+ "epoch 535: loss = 1825420.141279, a = 624.346430, b = 152.726778\n",
+ "epoch 536: loss = 1824999.003869, a = 624.994469, b = 152.726364\n",
+ "epoch 537: loss = 1824579.546136, a = 625.641212, b = 152.725951\n",
+ "epoch 538: loss = 1824161.761376, a = 626.286662, b = 152.725539\n",
+ "epoch 539: loss = 1823745.642910, a = 626.930821, b = 152.725127\n",
+ "epoch 540: loss = 1823331.184086, a = 627.573691, b = 152.724717\n",
+ "epoch 541: loss = 1822918.378279, a = 628.215277, b = 152.724307\n",
+ "epoch 542: loss = 1822507.218891, a = 628.855579, b = 152.723898\n",
+ "epoch 543: loss = 1822097.699350, a = 629.494601, b = 152.723490\n",
+ "epoch 544: loss = 1821689.813109, a = 630.132345, b = 152.723083\n",
+ "epoch 545: loss = 1821283.553649, a = 630.768814, b = 152.722676\n",
+ "epoch 546: loss = 1820878.914476, a = 631.404010, b = 152.722270\n",
+ "epoch 547: loss = 1820475.889122, a = 632.037936, b = 152.721865\n",
+ "epoch 548: loss = 1820074.471145, a = 632.670595, b = 152.721461\n",
+ "epoch 549: loss = 1819674.654128, a = 633.301988, b = 152.721058\n",
+ "epoch 550: loss = 1819276.431682, a = 633.932119, b = 152.720656\n",
+ "epoch 551: loss = 1818879.797440, a = 634.560989, b = 152.720254\n",
+ "epoch 552: loss = 1818484.745063, a = 635.188602, b = 152.719853\n",
+ "epoch 553: loss = 1818091.268237, a = 635.814960, b = 152.719453\n",
+ "epoch 554: loss = 1817699.360671, a = 636.440066, b = 152.719054\n",
+ "epoch 555: loss = 1817309.016104, a = 637.063922, b = 152.718655\n",
+ "epoch 556: loss = 1816920.228294, a = 637.686530, b = 152.718258\n",
+ "epoch 557: loss = 1816532.991028, a = 638.307893, b = 152.717861\n",
+ "epoch 558: loss = 1816147.298117, a = 638.928013, b = 152.717465\n",
+ "epoch 559: loss = 1815763.143396, a = 639.546894, b = 152.717070\n",
+ "epoch 560: loss = 1815380.520724, a = 640.164537, b = 152.716675\n",
+ "epoch 561: loss = 1814999.423987, a = 640.780944, b = 152.716281\n",
+ "epoch 562: loss = 1814619.847094, a = 641.396120, b = 152.715888\n",
+ "epoch 563: loss = 1814241.783977, a = 642.010065, b = 152.715496\n",
+ "epoch 564: loss = 1813865.228594, a = 642.622782, b = 152.715105\n",
+ "epoch 565: loss = 1813490.174926, a = 643.234274, b = 152.714714\n",
+ "epoch 566: loss = 1813116.616980, a = 643.844544, b = 152.714325\n",
+ "epoch 567: loss = 1812744.548785, a = 644.453593, b = 152.713936\n",
+ "epoch 568: loss = 1812373.964394, a = 645.061424, b = 152.713547\n",
+ "epoch 569: loss = 1812004.857885, a = 645.668039, b = 152.713160\n",
+ "epoch 570: loss = 1811637.223358, a = 646.273442, b = 152.712773\n",
+ "epoch 571: loss = 1811271.054937, a = 646.877634, b = 152.712387\n",
+ "epoch 572: loss = 1810906.346771, a = 647.480618, b = 152.712002\n",
+ "epoch 573: loss = 1810543.093031, a = 648.082396, b = 152.711618\n",
+ "epoch 574: loss = 1810181.287911, a = 648.682971, b = 152.711234\n",
+ "epoch 575: loss = 1809820.925628, a = 649.282345, b = 152.710852\n",
+ "epoch 576: loss = 1809462.000425, a = 649.880520, b = 152.710469\n",
+ "epoch 577: loss = 1809104.506563, a = 650.477499, b = 152.710088\n",
+ "epoch 578: loss = 1808748.438331, a = 651.073284, b = 152.709708\n",
+ "epoch 579: loss = 1808393.790037, a = 651.667878, b = 152.709328\n",
+ "epoch 580: loss = 1808040.556015, a = 652.261283, b = 152.708949\n",
+ "epoch 581: loss = 1807688.730617, a = 652.853502, b = 152.708571\n",
+ "epoch 582: loss = 1807338.308223, a = 653.444536, b = 152.708193\n",
+ "epoch 583: loss = 1806989.283232, a = 654.034388, b = 152.707816\n",
+ "epoch 584: loss = 1806641.650065, a = 654.623061, b = 152.707440\n",
+ "epoch 585: loss = 1806295.403168, a = 655.210556, b = 152.707065\n",
+ "epoch 586: loss = 1805950.537008, a = 655.796877, b = 152.706691\n",
+ "epoch 587: loss = 1805607.046072, a = 656.382025, b = 152.706317\n",
+ "epoch 588: loss = 1805264.924872, a = 656.966004, b = 152.705944\n",
+ "epoch 589: loss = 1804924.167940, a = 657.548814, b = 152.705572\n",
+ "epoch 590: loss = 1804584.769832, a = 658.130459, b = 152.705200\n",
+ "epoch 591: loss = 1804246.725122, a = 658.710941, b = 152.704829\n",
+ "epoch 592: loss = 1803910.028410, a = 659.290262, b = 152.704459\n",
+ "epoch 593: loss = 1803574.674315, a = 659.868425, b = 152.704090\n",
+ "epoch 594: loss = 1803240.657477, a = 660.445432, b = 152.703722\n",
+ "epoch 595: loss = 1802907.972559, a = 661.021284, b = 152.703354\n",
+ "epoch 596: loss = 1802576.614245, a = 661.595986, b = 152.702987\n",
+ "epoch 597: loss = 1802246.577240, a = 662.169538, b = 152.702620\n",
+ "epoch 598: loss = 1801917.856269, a = 662.741943, b = 152.702255\n",
+ "epoch 599: loss = 1801590.446081, a = 663.313203, b = 152.701890\n",
+ "epoch 600: loss = 1801264.341442, a = 663.883321, b = 152.701526\n",
+ "epoch 601: loss = 1800939.537143, a = 664.452299, b = 152.701163\n",
+ "epoch 602: loss = 1800616.027992, a = 665.020140, b = 152.700800\n",
+ "epoch 603: loss = 1800293.808821, a = 665.586845, b = 152.700438\n",
+ "epoch 604: loss = 1799972.874480, a = 666.152416, b = 152.700077\n",
+ "epoch 605: loss = 1799653.219842, a = 666.716857, b = 152.699716\n",
+ "epoch 606: loss = 1799334.839799, a = 667.280169, b = 152.699356\n",
+ "epoch 607: loss = 1799017.729262, a = 667.842355, b = 152.698997\n",
+ "epoch 608: loss = 1798701.883166, a = 668.403416, b = 152.698639\n",
+ "epoch 609: loss = 1798387.296463, a = 668.963355, b = 152.698281\n",
+ "epoch 610: loss = 1798073.964127, a = 669.522175, b = 152.697924\n",
+ "epoch 611: loss = 1797761.881151, a = 670.079877, b = 152.697568\n",
+ "epoch 612: loss = 1797451.042549, a = 670.636464, b = 152.697213\n",
+ "epoch 613: loss = 1797141.443353, a = 671.191938, b = 152.696858\n",
+ "epoch 614: loss = 1796833.078618, a = 671.746302, b = 152.696504\n",
+ "epoch 615: loss = 1796525.943415, a = 672.299557, b = 152.696150\n",
+ "epoch 616: loss = 1796220.032837, a = 672.851705, b = 152.695798\n",
+ "epoch 617: loss = 1795915.341998, a = 673.402749, b = 152.695446\n",
+ "epoch 618: loss = 1795611.866027, a = 673.952692, b = 152.695095\n",
+ "epoch 619: loss = 1795309.600077, a = 674.501534, b = 152.694744\n",
+ "epoch 620: loss = 1795008.539318, a = 675.049280, b = 152.694394\n",
+ "epoch 621: loss = 1794708.678940, a = 675.595930, b = 152.694045\n",
+ "epoch 622: loss = 1794410.014151, a = 676.141486, b = 152.693697\n",
+ "epoch 623: loss = 1794112.540180, a = 676.685952, b = 152.693349\n",
+ "epoch 624: loss = 1793816.252274, a = 677.229329, b = 152.693002\n",
+ "epoch 625: loss = 1793521.145700, a = 677.771620, b = 152.692656\n",
+ "epoch 626: loss = 1793227.215741, a = 678.312826, b = 152.692310\n",
+ "epoch 627: loss = 1792934.457703, a = 678.852950, b = 152.691965\n",
+ "epoch 628: loss = 1792642.866907, a = 679.391994, b = 152.691621\n",
+ "epoch 629: loss = 1792352.438696, a = 679.929959, b = 152.691277\n",
+ "epoch 630: loss = 1792063.168428, a = 680.466850, b = 152.690934\n",
+ "epoch 631: loss = 1791775.051483, a = 681.002666, b = 152.690592\n",
+ "epoch 632: loss = 1791488.083257, a = 681.537411, b = 152.690250\n",
+ "epoch 633: loss = 1791202.259166, a = 682.071087, b = 152.689909\n",
+ "epoch 634: loss = 1790917.574643, a = 682.603696, b = 152.689569\n",
+ "epoch 635: loss = 1790634.025140, a = 683.135239, b = 152.689230\n",
+ "epoch 636: loss = 1790351.606127, a = 683.665720, b = 152.688891\n",
+ "epoch 637: loss = 1790070.313092, a = 684.195140, b = 152.688553\n",
+ "epoch 638: loss = 1789790.141542, a = 684.723501, b = 152.688215\n",
+ "epoch 639: loss = 1789511.087000, a = 685.250806, b = 152.687879\n",
+ "epoch 640: loss = 1789233.145008, a = 685.777056, b = 152.687542\n",
+ "epoch 641: loss = 1788956.311125, a = 686.302254, b = 152.687207\n",
+ "epoch 642: loss = 1788680.580931, a = 686.826401, b = 152.686872\n",
+ "epoch 643: loss = 1788405.950018, a = 687.349501, b = 152.686538\n",
+ "epoch 644: loss = 1788132.414001, a = 687.871555, b = 152.686205\n",
+ "epoch 645: loss = 1787859.968509, a = 688.392564, b = 152.685872\n",
+ "epoch 646: loss = 1787588.609190, a = 688.912532, b = 152.685540\n",
+ "epoch 647: loss = 1787318.331709, a = 689.431460, b = 152.685208\n",
+ "epoch 648: loss = 1787049.131749, a = 689.949350, b = 152.684878\n",
+ "epoch 649: loss = 1786781.005009, a = 690.466205, b = 152.684548\n",
+ "epoch 650: loss = 1786513.947206, a = 690.982026, b = 152.684218\n",
+ "epoch 651: loss = 1786247.954073, a = 691.496816, b = 152.683889\n",
+ "epoch 652: loss = 1785983.021362, a = 692.010576, b = 152.683561\n",
+ "epoch 653: loss = 1785719.144840, a = 692.523309, b = 152.683234\n",
+ "epoch 654: loss = 1785456.320293, a = 693.035016, b = 152.682907\n",
+ "epoch 655: loss = 1785194.543521, a = 693.545701, b = 152.682581\n",
+ "epoch 656: loss = 1784933.810344, a = 694.055364, b = 152.682255\n",
+ "epoch 657: loss = 1784674.116596, a = 694.564008, b = 152.681930\n",
+ "epoch 658: loss = 1784415.458129, a = 695.071635, b = 152.681606\n",
+ "epoch 659: loss = 1784157.830811, a = 695.578247, b = 152.681282\n",
+ "epoch 660: loss = 1783901.230528, a = 696.083846, b = 152.680960\n",
+ "epoch 661: loss = 1783645.653179, a = 696.588433, b = 152.680637\n",
+ "epoch 662: loss = 1783391.094684, a = 697.092012, b = 152.680316\n",
+ "epoch 663: loss = 1783137.550975, a = 697.594584, b = 152.679995\n",
+ "epoch 664: loss = 1782885.018003, a = 698.096150, b = 152.679674\n",
+ "epoch 665: loss = 1782633.491734, a = 698.596714, b = 152.679355\n",
+ "epoch 666: loss = 1782382.968150, a = 699.096277, b = 152.679036\n",
+ "epoch 667: loss = 1782133.443251, a = 699.594841, b = 152.678717\n",
+ "epoch 668: loss = 1781884.913049, a = 700.092408, b = 152.678399\n",
+ "epoch 669: loss = 1781637.373576, a = 700.588980, b = 152.678082\n",
+ "epoch 670: loss = 1781390.820878, a = 701.084559, b = 152.677766\n",
+ "epoch 671: loss = 1781145.251017, a = 701.579147, b = 152.677450\n",
+ "epoch 672: loss = 1780900.660070, a = 702.072746, b = 152.677134\n",
+ "epoch 673: loss = 1780657.044131, a = 702.565358, b = 152.676820\n",
+ "epoch 674: loss = 1780414.399308, a = 703.056984, b = 152.676506\n",
+ "epoch 675: loss = 1780172.721727, a = 703.547628, b = 152.676192\n",
+ "epoch 676: loss = 1779932.007527, a = 704.037291, b = 152.675880\n",
+ "epoch 677: loss = 1779692.252863, a = 704.525974, b = 152.675568\n",
+ "epoch 678: loss = 1779453.453906, a = 705.013681, b = 152.675256\n",
+ "epoch 679: loss = 1779215.606843, a = 705.500412, b = 152.674945\n",
+ "epoch 680: loss = 1778978.707874, a = 705.986169, b = 152.674635\n",
+ "epoch 681: loss = 1778742.753217, a = 706.470956, b = 152.674325\n",
+ "epoch 682: loss = 1778507.739101, a = 706.954773, b = 152.674016\n",
+ "epoch 683: loss = 1778273.661775, a = 707.437622, b = 152.673708\n",
+ "epoch 684: loss = 1778040.517499, a = 707.919506, b = 152.673400\n",
+ "epoch 685: loss = 1777808.302550, a = 708.400426, b = 152.673093\n",
+ "epoch 686: loss = 1777577.013219, a = 708.880385, b = 152.672786\n",
+ "epoch 687: loss = 1777346.645813, a = 709.359384, b = 152.672481\n",
+ "epoch 688: loss = 1777117.196652, a = 709.837425, b = 152.672175\n",
+ "epoch 689: loss = 1776888.662073, a = 710.314510, b = 152.671870\n",
+ "epoch 690: loss = 1776661.038424, a = 710.790641, b = 152.671566\n",
+ "epoch 691: loss = 1776434.322072, a = 711.265820, b = 152.671263\n",
+ "epoch 692: loss = 1776208.509395, a = 711.740049, b = 152.670960\n",
+ "epoch 693: loss = 1775983.596787, a = 712.213329, b = 152.670658\n",
+ "epoch 694: loss = 1775759.580657, a = 712.685664, b = 152.670356\n",
+ "epoch 695: loss = 1775536.457426, a = 713.157053, b = 152.670055\n",
+ "epoch 696: loss = 1775314.223532, a = 713.627500, b = 152.669754\n",
+ "epoch 697: loss = 1775092.875426, a = 714.097006, b = 152.669455\n",
+ "epoch 698: loss = 1774872.409572, a = 714.565574, b = 152.669155\n",
+ "epoch 699: loss = 1774652.822451, a = 715.033204, b = 152.668857\n",
+ "epoch 700: loss = 1774434.110556, a = 715.499899, b = 152.668559\n",
+ "epoch 701: loss = 1774216.270393, a = 715.965661, b = 152.668261\n",
+ "epoch 702: loss = 1773999.298484, a = 716.430492, b = 152.667964\n",
+ "epoch 703: loss = 1773783.191366, a = 716.894393, b = 152.667668\n",
+ "epoch 704: loss = 1773567.945585, a = 717.357367, b = 152.667372\n",
+ "epoch 705: loss = 1773353.557706, a = 717.819415, b = 152.667077\n",
+ "epoch 706: loss = 1773140.024305, a = 718.280538, b = 152.666783\n",
+ "epoch 707: loss = 1772927.341972, a = 718.740740, b = 152.666489\n",
+ "epoch 708: loss = 1772715.507311, a = 719.200021, b = 152.666195\n",
+ "epoch 709: loss = 1772504.516939, a = 719.658384, b = 152.665903\n",
+ "epoch 710: loss = 1772294.367487, a = 720.115831, b = 152.665610\n",
+ "epoch 711: loss = 1772085.055600, a = 720.572363, b = 152.665319\n",
+ "epoch 712: loss = 1771876.577936, a = 721.027981, b = 152.665028\n",
+ "epoch 713: loss = 1771668.931165, a = 721.482689, b = 152.664737\n",
+ "epoch 714: loss = 1771462.111971, a = 721.936488, b = 152.664448\n",
+ "epoch 715: loss = 1771256.117053, a = 722.389379, b = 152.664158\n",
+ "epoch 716: loss = 1771050.943122, a = 722.841364, b = 152.663870\n",
+ "epoch 717: loss = 1770846.586900, a = 723.292446, b = 152.663582\n",
+ "epoch 718: loss = 1770643.045126, a = 723.742625, b = 152.663294\n",
+ "epoch 719: loss = 1770440.314550, a = 724.191904, b = 152.663007\n",
+ "epoch 720: loss = 1770238.391933, a = 724.640285, b = 152.662721\n",
+ "epoch 721: loss = 1770037.274053, a = 725.087770, b = 152.662435\n",
+ "epoch 722: loss = 1769836.957698, a = 725.534359, b = 152.662150\n",
+ "epoch 723: loss = 1769637.439670, a = 725.980056, b = 152.661865\n",
+ "epoch 724: loss = 1769438.716783, a = 726.424861, b = 152.661581\n",
+ "epoch 725: loss = 1769240.785864, a = 726.868776, b = 152.661297\n",
+ "epoch 726: loss = 1769043.643754, a = 727.311805, b = 152.661014\n",
+ "epoch 727: loss = 1768847.287304, a = 727.753947, b = 152.660732\n",
+ "epoch 728: loss = 1768651.713380, a = 728.195205, b = 152.660450\n",
+ "epoch 729: loss = 1768456.918858, a = 728.635580, b = 152.660169\n",
+ "epoch 730: loss = 1768262.900630, a = 729.075075, b = 152.659888\n",
+ "epoch 731: loss = 1768069.655598, a = 729.513692, b = 152.659608\n",
+ "epoch 732: loss = 1767877.180675, a = 729.951431, b = 152.659328\n",
+ "epoch 733: loss = 1767685.472790, a = 730.388294, b = 152.659049\n",
+ "epoch 734: loss = 1767494.528882, a = 730.824285, b = 152.658771\n",
+ "epoch 735: loss = 1767304.345902, a = 731.259403, b = 152.658493\n",
+ "epoch 736: loss = 1767114.920814, a = 731.693651, b = 152.658216\n",
+ "epoch 737: loss = 1766926.250593, a = 732.127031, b = 152.657939\n",
+ "epoch 738: loss = 1766738.332229, a = 732.559544, b = 152.657663\n",
+ "epoch 739: loss = 1766551.162720, a = 732.991193, b = 152.657387\n",
+ "epoch 740: loss = 1766364.739080, a = 733.421978, b = 152.657112\n",
+ "epoch 741: loss = 1766179.058330, a = 733.851902, b = 152.656837\n",
+ "epoch 742: loss = 1765994.117509, a = 734.280966, b = 152.656563\n",
+ "epoch 743: loss = 1765809.913662, a = 734.709172, b = 152.656290\n",
+ "epoch 744: loss = 1765626.443849, a = 735.136522, b = 152.656017\n",
+ "epoch 745: loss = 1765443.705143, a = 735.563017, b = 152.655744\n",
+ "epoch 746: loss = 1765261.694624, a = 735.988660, b = 152.655472\n",
+ "epoch 747: loss = 1765080.409388, a = 736.413451, b = 152.655201\n",
+ "epoch 748: loss = 1764899.846541, a = 736.837393, b = 152.654930\n",
+ "epoch 749: loss = 1764720.003201, a = 737.260487, b = 152.654660\n",
+ "epoch 750: loss = 1764540.876496, a = 737.682735, b = 152.654390\n",
+ "epoch 751: loss = 1764362.463568, a = 738.104139, b = 152.654121\n",
+ "epoch 752: loss = 1764184.761567, a = 738.524700, b = 152.653853\n",
+ "epoch 753: loss = 1764007.767659, a = 738.944420, b = 152.653585\n",
+ "epoch 754: loss = 1763831.479016, a = 739.363301, b = 152.653317\n",
+ "epoch 755: loss = 1763655.892826, a = 739.781344, b = 152.653050\n",
+ "epoch 756: loss = 1763481.006286, a = 740.198551, b = 152.652784\n",
+ "epoch 757: loss = 1763306.816603, a = 740.614924, b = 152.652518\n",
+ "epoch 758: loss = 1763133.320998, a = 741.030464, b = 152.652252\n",
+ "epoch 759: loss = 1762960.516702, a = 741.445174, b = 152.651987\n",
+ "epoch 760: loss = 1762788.400955, a = 741.859054, b = 152.651723\n",
+ "epoch 761: loss = 1762616.971010, a = 742.272106, b = 152.651459\n",
+ "epoch 762: loss = 1762446.224132, a = 742.684333, b = 152.651196\n",
+ "epoch 763: loss = 1762276.157595, a = 743.095735, b = 152.650933\n",
+ "epoch 764: loss = 1762106.768685, a = 743.506314, b = 152.650671\n",
+ "epoch 765: loss = 1761938.054697, a = 743.916073, b = 152.650409\n",
+ "epoch 766: loss = 1761770.012940, a = 744.325012, b = 152.650148\n",
+ "epoch 767: loss = 1761602.640730, a = 744.733133, b = 152.649887\n",
+ "epoch 768: loss = 1761435.935396, a = 745.140439, b = 152.649627\n",
+ "epoch 769: loss = 1761269.894279, a = 745.546929, b = 152.649368\n",
+ "epoch 770: loss = 1761104.514727, a = 745.952607, b = 152.649109\n",
+ "epoch 771: loss = 1760939.794101, a = 746.357474, b = 152.648850\n",
+ "epoch 772: loss = 1760775.729772, a = 746.761531, b = 152.648592\n",
+ "epoch 773: loss = 1760612.319122, a = 747.164780, b = 152.648334\n",
+ "epoch 774: loss = 1760449.559542, a = 747.567223, b = 152.648077\n",
+ "epoch 775: loss = 1760287.448435, a = 747.968861, b = 152.647821\n",
+ "epoch 776: loss = 1760125.983214, a = 748.369696, b = 152.647565\n",
+ "epoch 777: loss = 1759965.161302, a = 748.769729, b = 152.647309\n",
+ "epoch 778: loss = 1759804.980131, a = 749.168963, b = 152.647054\n",
+ "epoch 779: loss = 1759645.437147, a = 749.567398, b = 152.646800\n",
+ "epoch 780: loss = 1759486.529802, a = 749.965036, b = 152.646546\n",
+ "epoch 781: loss = 1759328.255560, a = 750.361879, b = 152.646292\n",
+ "epoch 782: loss = 1759170.611896, a = 750.757929, b = 152.646039\n",
+ "epoch 783: loss = 1759013.596294, a = 751.153187, b = 152.645787\n",
+ "epoch 784: loss = 1758857.206248, a = 751.547654, b = 152.645535\n",
+ "epoch 785: loss = 1758701.439262, a = 751.941332, b = 152.645284\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "epoch 786: loss = 1758546.292851, a = 752.334224, b = 152.645033\n",
+ "epoch 787: loss = 1758391.764538, a = 752.726329, b = 152.644782\n",
+ "epoch 788: loss = 1758237.851858, a = 753.117651, b = 152.644532\n",
+ "epoch 789: loss = 1758084.552355, a = 753.508190, b = 152.644283\n",
+ "epoch 790: loss = 1757931.863581, a = 753.897948, b = 152.644034\n",
+ "epoch 791: loss = 1757779.783102, a = 754.286926, b = 152.643785\n",
+ "epoch 792: loss = 1757628.308489, a = 754.675127, b = 152.643538\n",
+ "epoch 793: loss = 1757477.437325, a = 755.062552, b = 152.643290\n",
+ "epoch 794: loss = 1757327.167204, a = 755.449202, b = 152.643043\n",
+ "epoch 795: loss = 1757177.495727, a = 755.835078, b = 152.642797\n",
+ "epoch 796: loss = 1757028.420505, a = 756.220183, b = 152.642551\n",
+ "epoch 797: loss = 1756879.939161, a = 756.604518, b = 152.642305\n",
+ "epoch 798: loss = 1756732.049325, a = 756.988085, b = 152.642060\n",
+ "epoch 799: loss = 1756584.748637, a = 757.370884, b = 152.641816\n",
+ "epoch 800: loss = 1756438.034746, a = 757.752918, b = 152.641572\n",
+ "epoch 801: loss = 1756291.905312, a = 758.134188, b = 152.641328\n",
+ "epoch 802: loss = 1756146.358003, a = 758.514696, b = 152.641085\n",
+ "epoch 803: loss = 1756001.390496, a = 758.894442, b = 152.640843\n",
+ "epoch 804: loss = 1755857.000479, a = 759.273430, b = 152.640601\n",
+ "epoch 805: loss = 1755713.185647, a = 759.651659, b = 152.640359\n",
+ "epoch 806: loss = 1755569.943706, a = 760.029132, b = 152.640118\n",
+ "epoch 807: loss = 1755427.272371, a = 760.405851, b = 152.639877\n",
+ "epoch 808: loss = 1755285.169365, a = 760.781816, b = 152.639637\n",
+ "epoch 809: loss = 1755143.632421, a = 761.157029, b = 152.639398\n",
+ "epoch 810: loss = 1755002.659280, a = 761.531492, b = 152.639158\n",
+ "epoch 811: loss = 1754862.247693, a = 761.905206, b = 152.638920\n",
+ "epoch 812: loss = 1754722.395421, a = 762.278173, b = 152.638681\n",
+ "epoch 813: loss = 1754583.100231, a = 762.650394, b = 152.638444\n",
+ "epoch 814: loss = 1754444.359902, a = 763.021870, b = 152.638206\n",
+ "epoch 815: loss = 1754306.172220, a = 763.392604, b = 152.637970\n",
+ "epoch 816: loss = 1754168.534980, a = 763.762597, b = 152.637733\n",
+ "epoch 817: loss = 1754031.445986, a = 764.131849, b = 152.637498\n",
+ "epoch 818: loss = 1753894.903051, a = 764.500363, b = 152.637262\n",
+ "epoch 819: loss = 1753758.903998, a = 764.868141, b = 152.637027\n",
+ "epoch 820: loss = 1753623.446655, a = 765.235183, b = 152.636793\n",
+ "epoch 821: loss = 1753488.528863, a = 765.601491, b = 152.636559\n",
+ "epoch 822: loss = 1753354.148468, a = 765.967066, b = 152.636325\n",
+ "epoch 823: loss = 1753220.303328, a = 766.331911, b = 152.636092\n",
+ "epoch 824: loss = 1753086.991306, a = 766.696025, b = 152.635860\n",
+ "epoch 825: loss = 1752954.210276, a = 767.059412, b = 152.635628\n",
+ "epoch 826: loss = 1752821.958120, a = 767.422072, b = 152.635396\n",
+ "epoch 827: loss = 1752690.232728, a = 767.784007, b = 152.635165\n",
+ "epoch 828: loss = 1752559.031999, a = 768.145218, b = 152.634934\n",
+ "epoch 829: loss = 1752428.353839, a = 768.505707, b = 152.634704\n",
+ "epoch 830: loss = 1752298.196165, a = 768.865475, b = 152.634474\n",
+ "epoch 831: loss = 1752168.556899, a = 769.224524, b = 152.634245\n",
+ "epoch 832: loss = 1752039.433974, a = 769.582854, b = 152.634016\n",
+ "epoch 833: loss = 1751910.825331, a = 769.940468, b = 152.633788\n",
+ "epoch 834: loss = 1751782.728917, a = 770.297367, b = 152.633560\n",
+ "epoch 835: loss = 1751655.142689, a = 770.653552, b = 152.633332\n",
+ "epoch 836: loss = 1751528.064612, a = 771.009025, b = 152.633105\n",
+ "epoch 837: loss = 1751401.492660, a = 771.363788, b = 152.632879\n",
+ "epoch 838: loss = 1751275.424813, a = 771.717840, b = 152.632652\n",
+ "epoch 839: loss = 1751149.859059, a = 772.071185, b = 152.632427\n",
+ "epoch 840: loss = 1751024.793398, a = 772.423823, b = 152.632201\n",
+ "epoch 841: loss = 1750900.225833, a = 772.775756, b = 152.631977\n",
+ "epoch 842: loss = 1750776.154377, a = 773.126986, b = 152.631752\n",
+ "epoch 843: loss = 1750652.577052, a = 773.477513, b = 152.631529\n",
+ "epoch 844: loss = 1750529.491887, a = 773.827339, b = 152.631305\n",
+ "epoch 845: loss = 1750406.896918, a = 774.176465, b = 152.631082\n",
+ "epoch 846: loss = 1750284.790190, a = 774.524893, b = 152.630860\n",
+ "epoch 847: loss = 1750163.169756, a = 774.872625, b = 152.630637\n",
+ "epoch 848: loss = 1750042.033675, a = 775.219661, b = 152.630416\n",
+ "epoch 849: loss = 1749921.380017, a = 775.566004, b = 152.630195\n",
+ "epoch 850: loss = 1749801.206855, a = 775.911653, b = 152.629974\n",
+ "epoch 851: loss = 1749681.512274, a = 776.256612, b = 152.629754\n",
+ "epoch 852: loss = 1749562.294365, a = 776.600881, b = 152.629534\n",
+ "epoch 853: loss = 1749443.551226, a = 776.944461, b = 152.629314\n",
+ "epoch 854: loss = 1749325.280964, a = 777.287354, b = 152.629095\n",
+ "epoch 855: loss = 1749207.481692, a = 777.629562, b = 152.628877\n",
+ "epoch 856: loss = 1749090.151532, a = 777.971085, b = 152.628658\n",
+ "epoch 857: loss = 1748973.288613, a = 778.311925, b = 152.628441\n",
+ "epoch 858: loss = 1748856.891070, a = 778.652084, b = 152.628224\n",
+ "epoch 859: loss = 1748740.957047, a = 778.991563, b = 152.628007\n",
+ "epoch 860: loss = 1748625.484697, a = 779.330363, b = 152.627790\n",
+ "epoch 861: loss = 1748510.472176, a = 779.668485, b = 152.627574\n",
+ "epoch 862: loss = 1748395.917651, a = 780.005931, b = 152.627359\n",
+ "epoch 863: loss = 1748281.819296, a = 780.342702, b = 152.627144\n",
+ "epoch 864: loss = 1748168.175290, a = 780.678800, b = 152.626929\n",
+ "epoch 865: loss = 1748054.983822, a = 781.014226, b = 152.626715\n",
+ "epoch 866: loss = 1747942.243086, a = 781.348981, b = 152.626501\n",
+ "epoch 867: loss = 1747829.951284, a = 781.683067, b = 152.626288\n",
+ "epoch 868: loss = 1747718.106627, a = 782.016484, b = 152.626075\n",
+ "epoch 869: loss = 1747606.707330, a = 782.349235, b = 152.625862\n",
+ "epoch 870: loss = 1747495.751617, a = 782.681321, b = 152.625650\n",
+ "epoch 871: loss = 1747385.237718, a = 783.012742, b = 152.625438\n",
+ "epoch 872: loss = 1747275.163873, a = 783.343501, b = 152.625227\n",
+ "epoch 873: loss = 1747165.528325, a = 783.673598, b = 152.625016\n",
+ "epoch 874: loss = 1747056.329325, a = 784.003035, b = 152.624806\n",
+ "epoch 875: loss = 1746947.565134, a = 784.331814, b = 152.624596\n",
+ "epoch 876: loss = 1746839.234017, a = 784.659935, b = 152.624386\n",
+ "epoch 877: loss = 1746731.334246, a = 784.987400, b = 152.624177\n",
+ "epoch 878: loss = 1746623.864101, a = 785.314210, b = 152.623968\n",
+ "epoch 879: loss = 1746516.821869, a = 785.640366, b = 152.623760\n",
+ "epoch 880: loss = 1746410.205842, a = 785.965871, b = 152.623552\n",
+ "epoch 881: loss = 1746304.014321, a = 786.290724, b = 152.623345\n",
+ "epoch 882: loss = 1746198.245613, a = 786.614928, b = 152.623138\n",
+ "epoch 883: loss = 1746092.898031, a = 786.938483, b = 152.622931\n",
+ "epoch 884: loss = 1745987.969896, a = 787.261392, b = 152.622725\n",
+ "epoch 885: loss = 1745883.459534, a = 787.583655, b = 152.622519\n",
+ "epoch 886: loss = 1745779.365280, a = 787.905273, b = 152.622314\n",
+ "epoch 887: loss = 1745675.685474, a = 788.226248, b = 152.622109\n",
+ "epoch 888: loss = 1745572.418463, a = 788.546582, b = 152.621904\n",
+ "epoch 889: loss = 1745469.562600, a = 788.866275, b = 152.621700\n",
+ "epoch 890: loss = 1745367.116247, a = 789.185328, b = 152.621496\n",
+ "epoch 891: loss = 1745265.077768, a = 789.503744, b = 152.621293\n",
+ "epoch 892: loss = 1745163.445539, a = 789.821523, b = 152.621090\n",
+ "epoch 893: loss = 1745062.217938, a = 790.138666, b = 152.620887\n",
+ "epoch 894: loss = 1744961.393352, a = 790.455175, b = 152.620685\n",
+ "epoch 895: loss = 1744860.970173, a = 790.771052, b = 152.620483\n",
+ "epoch 896: loss = 1744760.946801, a = 791.086296, b = 152.620282\n",
+ "epoch 897: loss = 1744661.321640, a = 791.400911, b = 152.620081\n",
+ "epoch 898: loss = 1744562.093104, a = 791.714896, b = 152.619880\n",
+ "epoch 899: loss = 1744463.259609, a = 792.028253, b = 152.619680\n",
+ "epoch 900: loss = 1744364.819581, a = 792.340984, b = 152.619480\n",
+ "epoch 901: loss = 1744266.771451, a = 792.653089, b = 152.619281\n",
+ "epoch 902: loss = 1744169.113654, a = 792.964570, b = 152.619082\n",
+ "epoch 903: loss = 1744071.844635, a = 793.275429, b = 152.618884\n",
+ "epoch 904: loss = 1743974.962844, a = 793.585665, b = 152.618685\n",
+ "epoch 905: loss = 1743878.466735, a = 793.895282, b = 152.618488\n",
+ "epoch 906: loss = 1743782.354770, a = 794.204279, b = 152.618290\n",
+ "epoch 907: loss = 1743686.625419, a = 794.512658, b = 152.618093\n",
+ "epoch 908: loss = 1743591.277154, a = 794.820421, b = 152.617897\n",
+ "epoch 909: loss = 1743496.308456, a = 795.127568, b = 152.617701\n",
+ "epoch 910: loss = 1743401.717811, a = 795.434101, b = 152.617505\n",
+ "epoch 911: loss = 1743307.503711, a = 795.740021, b = 152.617310\n",
+ "epoch 912: loss = 1743213.664656, a = 796.045330, b = 152.617115\n",
+ "epoch 913: loss = 1743120.199149, a = 796.350028, b = 152.616920\n",
+ "epoch 914: loss = 1743027.105700, a = 796.654116, b = 152.616726\n",
+ "epoch 915: loss = 1742934.382825, a = 796.957597, b = 152.616532\n",
+ "epoch 916: loss = 1742842.029048, a = 797.260470, b = 152.616338\n",
+ "epoch 917: loss = 1742750.042895, a = 797.562738, b = 152.616145\n",
+ "epoch 918: loss = 1742658.422902, a = 797.864402, b = 152.615953\n",
+ "epoch 919: loss = 1742567.167606, a = 798.165462, b = 152.615760\n",
+ "epoch 920: loss = 1742476.275556, a = 798.465920, b = 152.615568\n",
+ "epoch 921: loss = 1742385.745300, a = 798.765778, b = 152.615377\n",
+ "epoch 922: loss = 1742295.575398, a = 799.065036, b = 152.615186\n",
+ "epoch 923: loss = 1742205.764411, a = 799.363695, b = 152.614995\n",
+ "epoch 924: loss = 1742116.310909, a = 799.661757, b = 152.614805\n",
+ "epoch 925: loss = 1742027.213466, a = 799.959223, b = 152.614615\n",
+ "epoch 926: loss = 1741938.470661, a = 800.256095, b = 152.614425\n",
+ "epoch 927: loss = 1741850.081082, a = 800.552373, b = 152.614236\n",
+ "epoch 928: loss = 1741762.043319, a = 800.848058, b = 152.614047\n",
+ "epoch 929: loss = 1741674.355969, a = 801.143152, b = 152.613859\n",
+ "epoch 930: loss = 1741587.017634, a = 801.437656, b = 152.613670\n",
+ "epoch 931: loss = 1741500.026924, a = 801.731571, b = 152.613483\n",
+ "epoch 932: loss = 1741413.382452, a = 802.024898, b = 152.613295\n",
+ "epoch 933: loss = 1741327.082837, a = 802.317639, b = 152.613108\n",
+ "epoch 934: loss = 1741241.126703, a = 802.609794, b = 152.612922\n",
+ "epoch 935: loss = 1741155.512682, a = 802.901365, b = 152.612736\n",
+ "epoch 936: loss = 1741070.239409, a = 803.192353, b = 152.612550\n",
+ "epoch 937: loss = 1740985.305526, a = 803.482759, b = 152.612364\n",
+ "epoch 938: loss = 1740900.709678, a = 803.772585, b = 152.612179\n",
+ "epoch 939: loss = 1740816.450518, a = 804.061831, b = 152.611994\n",
+ "epoch 940: loss = 1740732.526703, a = 804.350498, b = 152.611810\n",
+ "epoch 941: loss = 1740648.936897, a = 804.638588, b = 152.611626\n",
+ "epoch 942: loss = 1740565.679766, a = 804.926103, b = 152.611442\n",
+ "epoch 943: loss = 1740482.753986, a = 805.213042, b = 152.611259\n",
+ "epoch 944: loss = 1740400.158233, a = 805.499407, b = 152.611076\n",
+ "epoch 945: loss = 1740317.891193, a = 805.785200, b = 152.610894\n",
+ "epoch 946: loss = 1740235.951555, a = 806.070421, b = 152.610712\n",
+ "epoch 947: loss = 1740154.338013, a = 806.355072, b = 152.610530\n",
+ "epoch 948: loss = 1740073.049267, a = 806.639154, b = 152.610348\n",
+ "epoch 949: loss = 1739992.084021, a = 806.922668, b = 152.610167\n",
+ "epoch 950: loss = 1739911.440986, a = 807.205615, b = 152.609986\n",
+ "epoch 951: loss = 1739831.118877, a = 807.487996, b = 152.609806\n",
+ "epoch 952: loss = 1739751.116414, a = 807.769812, b = 152.609626\n",
+ "epoch 953: loss = 1739671.432323, a = 808.051065, b = 152.609446\n",
+ "epoch 954: loss = 1739592.065335, a = 808.331755, b = 152.609267\n",
+ "epoch 955: loss = 1739513.014184, a = 808.611884, b = 152.609088\n",
+ "epoch 956: loss = 1739434.277612, a = 808.891453, b = 152.608910\n",
+ "epoch 957: loss = 1739355.854363, a = 809.170463, b = 152.608732\n",
+ "epoch 958: loss = 1739277.743190, a = 809.448915, b = 152.608554\n",
+ "epoch 959: loss = 1739199.942847, a = 809.726810, b = 152.608376\n",
+ "epoch 960: loss = 1739122.452096, a = 810.004149, b = 152.608199\n",
+ "epoch 961: loss = 1739045.269701, a = 810.280934, b = 152.608022\n",
+ "epoch 962: loss = 1738968.394433, a = 810.557165, b = 152.607846\n",
+ "epoch 963: loss = 1738891.825068, a = 810.832844, b = 152.607670\n",
+ "epoch 964: loss = 1738815.560385, a = 811.107972, b = 152.607494\n",
+ "epoch 965: loss = 1738739.599171, a = 811.382550, b = 152.607319\n",
+ "epoch 966: loss = 1738663.940215, a = 811.656578, b = 152.607144\n",
+ "epoch 967: loss = 1738588.582311, a = 811.930059, b = 152.606969\n",
+ "epoch 968: loss = 1738513.524261, a = 812.202992, b = 152.606795\n",
+ "epoch 969: loss = 1738438.764867, a = 812.475380, b = 152.606621\n",
+ "epoch 970: loss = 1738364.302940, a = 812.747223, b = 152.606447\n",
+ "epoch 971: loss = 1738290.137292, a = 813.018523, b = 152.606274\n",
+ "epoch 972: loss = 1738216.266744, a = 813.289280, b = 152.606101\n",
+ "epoch 973: loss = 1738142.690118, a = 813.559496, b = 152.605928\n",
+ "epoch 974: loss = 1738069.406242, a = 813.829171, b = 152.605756\n",
+ "epoch 975: loss = 1737996.413950, a = 814.098307, b = 152.605584\n",
+ "epoch 976: loss = 1737923.712078, a = 814.366905, b = 152.605413\n",
+ "epoch 977: loss = 1737851.299469, a = 814.634966, b = 152.605241\n",
+ "epoch 978: loss = 1737779.174969, a = 814.902490, b = 152.605071\n",
+ "epoch 979: loss = 1737707.337430, a = 815.169480, b = 152.604900\n",
+ "epoch 980: loss = 1737635.785708, a = 815.435936, b = 152.604730\n",
+ "epoch 981: loss = 1737564.518663, a = 815.701859, b = 152.604560\n",
+ "epoch 982: loss = 1737493.535160, a = 815.967250, b = 152.604390\n",
+ "epoch 983: loss = 1737422.834069, a = 816.232111, b = 152.604221\n",
+ "epoch 984: loss = 1737352.414263, a = 816.496442, b = 152.604052\n",
+ "epoch 985: loss = 1737282.274622, a = 816.760244, b = 152.603884\n",
+ "epoch 986: loss = 1737212.414028, a = 817.023519, b = 152.603716\n",
+ "epoch 987: loss = 1737142.831368, a = 817.286268, b = 152.603548\n",
+ "epoch 988: loss = 1737073.525536, a = 817.548491, b = 152.603381\n",
+ "epoch 989: loss = 1737004.495426, a = 817.810189, b = 152.603213\n",
+ "epoch 990: loss = 1736935.739941, a = 818.071365, b = 152.603047\n",
+ "epoch 991: loss = 1736867.257984, a = 818.332018, b = 152.602880\n",
+ "epoch 992: loss = 1736799.048465, a = 818.592150, b = 152.602714\n",
+ "epoch 993: loss = 1736731.110299, a = 818.851761, b = 152.602548\n",
+ "epoch 994: loss = 1736663.442403, a = 819.110854, b = 152.602383\n",
+ "epoch 995: loss = 1736596.043701, a = 819.369428, b = 152.602218\n",
+ "epoch 996: loss = 1736528.913118, a = 819.627486, b = 152.602053\n",
+ "epoch 997: loss = 1736462.049586, a = 819.885027, b = 152.601888\n",
+ "epoch 998: loss = 1736395.452040, a = 820.142053, b = 152.601724\n",
+ "epoch 999: loss = 1736329.119420, a = 820.398566, b = 152.601560\n",
+ "epoch 1000: loss = 1736263.050670, a = 820.654565, b = 152.601397\n",
+ "epoch 1001: loss = 1736197.244737, a = 820.910053, b = 152.601234\n",
+ "epoch 1002: loss = 1736131.700574, a = 821.165029, b = 152.601071\n",
+ "epoch 1003: loss = 1736066.417138, a = 821.419496, b = 152.600908\n",
+ "epoch 1004: loss = 1736001.393389, a = 821.673454, b = 152.600746\n",
+ "epoch 1005: loss = 1735936.628292, a = 821.926904, b = 152.600584\n",
+ "epoch 1006: loss = 1735872.120815, a = 822.179847, b = 152.600422\n",
+ "epoch 1007: loss = 1735807.869932, a = 822.432285, b = 152.600261\n",
+ "epoch 1008: loss = 1735743.874619, a = 822.684217, b = 152.600100\n",
+ "epoch 1009: loss = 1735680.133859, a = 822.935646, b = 152.599940\n",
+ "epoch 1010: loss = 1735616.646635, a = 823.186572, b = 152.599780\n",
+ "epoch 1011: loss = 1735553.411939, a = 823.436997, b = 152.599620\n",
+ "epoch 1012: loss = 1735490.428761, a = 823.686920, b = 152.599460\n",
+ "epoch 1013: loss = 1735427.696101, a = 823.936344, b = 152.599301\n",
+ "epoch 1014: loss = 1735365.212960, a = 824.185269, b = 152.599142\n",
+ "epoch 1015: loss = 1735302.978342, a = 824.433697, b = 152.598983\n",
+ "epoch 1016: loss = 1735240.991257, a = 824.681627, b = 152.598825\n",
+ "epoch 1017: loss = 1735179.250719, a = 824.929062, b = 152.598667\n",
+ "epoch 1018: loss = 1735117.755744, a = 825.176002, b = 152.598509\n",
+ "epoch 1019: loss = 1735056.505353, a = 825.422448, b = 152.598351\n",
+ "epoch 1020: loss = 1734995.498573, a = 825.668401, b = 152.598194\n",
+ "epoch 1021: loss = 1734934.734430, a = 825.913863, b = 152.598038\n",
+ "epoch 1022: loss = 1734874.211960, a = 826.158833, b = 152.597881\n",
+ "epoch 1023: loss = 1734813.930197, a = 826.403314, b = 152.597725\n",
+ "epoch 1024: loss = 1734753.888182, a = 826.647306, b = 152.597569\n",
+ "epoch 1025: loss = 1734694.084961, a = 826.890810, b = 152.597414\n",
+ "epoch 1026: loss = 1734634.519580, a = 827.133827, b = 152.597258\n",
+ "epoch 1027: loss = 1734575.191092, a = 827.376358, b = 152.597104\n",
+ "epoch 1028: loss = 1734516.098553, a = 827.618405, b = 152.596949\n",
+ "epoch 1029: loss = 1734457.241022, a = 827.859967, b = 152.596795\n",
+ "epoch 1030: loss = 1734398.617562, a = 828.101046, b = 152.596641\n",
+ "epoch 1031: loss = 1734340.227240, a = 828.341643, b = 152.596487\n",
+ "epoch 1032: loss = 1734282.069127, a = 828.581759, b = 152.596334\n",
+ "epoch 1033: loss = 1734224.142298, a = 828.821394, b = 152.596181\n",
+ "epoch 1034: loss = 1734166.445830, a = 829.060551, b = 152.596028\n",
+ "epoch 1035: loss = 1734108.978805, a = 829.299229, b = 152.595875\n",
+ "epoch 1036: loss = 1734051.740309, a = 829.537430, b = 152.595723\n",
+ "epoch 1037: loss = 1733994.729431, a = 829.775155, b = 152.595571\n",
+ "epoch 1038: loss = 1733937.945263, a = 830.012405, b = 152.595420\n",
+ "epoch 1039: loss = 1733881.386903, a = 830.249179, b = 152.595269\n",
+ "epoch 1040: loss = 1733825.053449, a = 830.485481, b = 152.595118\n",
+ "epoch 1041: loss = 1733768.944005, a = 830.721310, b = 152.594967\n",
+ "epoch 1042: loss = 1733713.057679, a = 830.956667, b = 152.594817\n",
+ "epoch 1043: loss = 1733657.393581, a = 831.191554, b = 152.594667\n",
+ "epoch 1044: loss = 1733601.950825, a = 831.425971, b = 152.594517\n",
+ "epoch 1045: loss = 1733546.728530, a = 831.659919, b = 152.594368\n",
+ "epoch 1046: loss = 1733491.725816, a = 831.893400, b = 152.594218\n",
+ "epoch 1047: loss = 1733436.941808, a = 832.126413, b = 152.594070\n",
+ "epoch 1048: loss = 1733382.375635, a = 832.358961, b = 152.593921\n",
+ "epoch 1049: loss = 1733328.026428, a = 832.591044, b = 152.593773\n",
+ "epoch 1050: loss = 1733273.893322, a = 832.822662, b = 152.593625\n",
+ "epoch 1051: loss = 1733219.975457, a = 833.053817, b = 152.593477\n",
+ "epoch 1052: loss = 1733166.271975, a = 833.284511, b = 152.593330\n",
+ "epoch 1053: loss = 1733112.782020, a = 833.514742, b = 152.593183\n",
+ "epoch 1054: loss = 1733059.504742, a = 833.744514, b = 152.593036\n",
+ "epoch 1055: loss = 1733006.439293, a = 833.973826, b = 152.592890\n",
+ "epoch 1056: loss = 1732953.584830, a = 834.202679, b = 152.592744\n",
+ "epoch 1057: loss = 1732900.940510, a = 834.431075, b = 152.592598\n",
+ "epoch 1058: loss = 1732848.505497, a = 834.659014, b = 152.592452\n",
+ "epoch 1059: loss = 1732796.278956, a = 834.886497, b = 152.592307\n",
+ "epoch 1060: loss = 1732744.260056, a = 835.113526, b = 152.592162\n",
+ "epoch 1061: loss = 1732692.447971, a = 835.340100, b = 152.592017\n",
+ "epoch 1062: loss = 1732640.841875, a = 835.566221, b = 152.591873\n",
+ "epoch 1063: loss = 1732589.440947, a = 835.791890, b = 152.591729\n",
+ "epoch 1064: loss = 1732538.244371, a = 836.017108, b = 152.591585\n",
+ "epoch 1065: loss = 1732487.251331, a = 836.241876, b = 152.591441\n",
+ "epoch 1066: loss = 1732436.461017, a = 836.466194, b = 152.591298\n",
+ "epoch 1067: loss = 1732385.872620, a = 836.690063, b = 152.591155\n",
+ "epoch 1068: loss = 1732335.485336, a = 836.913485, b = 152.591012\n",
+ "epoch 1069: loss = 1732285.298362, a = 837.136460, b = 152.590870\n",
+ "epoch 1070: loss = 1732235.310902, a = 837.358990, b = 152.590728\n",
+ "epoch 1071: loss = 1732185.522160, a = 837.581074, b = 152.590586\n",
+ "epoch 1072: loss = 1732135.931343, a = 837.802714, b = 152.590444\n",
+ "epoch 1073: loss = 1732086.537664, a = 838.023911, b = 152.590303\n",
+ "epoch 1074: loss = 1732037.340336, a = 838.244665, b = 152.590162\n",
+ "epoch 1075: loss = 1731988.338577, a = 838.464978, b = 152.590021\n",
+ "epoch 1076: loss = 1731939.531607, a = 838.684851, b = 152.589881\n",
+ "epoch 1077: loss = 1731890.918651, a = 838.904284, b = 152.589741\n",
+ "epoch 1078: loss = 1731842.498935, a = 839.123278, b = 152.589601\n",
+ "epoch 1079: loss = 1731794.271688, a = 839.341834, b = 152.589461\n",
+ "epoch 1080: loss = 1731746.236145, a = 839.559954, b = 152.589322\n",
+ "epoch 1081: loss = 1731698.391541, a = 839.777637, b = 152.589183\n",
+ "epoch 1082: loss = 1731650.737115, a = 839.994884, b = 152.589044\n",
+ "epoch 1083: loss = 1731603.272109, a = 840.211698, b = 152.588906\n",
+ "epoch 1084: loss = 1731555.995768, a = 840.428077, b = 152.588767\n",
+ "epoch 1085: loss = 1731508.907341, a = 840.644024, b = 152.588629\n",
+ "epoch 1086: loss = 1731462.006079, a = 840.859540, b = 152.588492\n",
+ "epoch 1087: loss = 1731415.291236, a = 841.074624, b = 152.588354\n",
+ "epoch 1088: loss = 1731368.762068, a = 841.289278, b = 152.588217\n",
+ "epoch 1089: loss = 1731322.417837, a = 841.503503, b = 152.588081\n",
+ "epoch 1090: loss = 1731276.257805, a = 841.717299, b = 152.587944\n",
+ "epoch 1091: loss = 1731230.281238, a = 841.930668, b = 152.587808\n",
+ "epoch 1092: loss = 1731184.487405, a = 842.143611, b = 152.587672\n",
+ "epoch 1093: loss = 1731138.875577, a = 842.356127, b = 152.587536\n",
+ "epoch 1094: loss = 1731093.445031, a = 842.568219, b = 152.587401\n",
+ "epoch 1095: loss = 1731048.195043, a = 842.779886, b = 152.587265\n",
+ "epoch 1096: loss = 1731003.124893, a = 842.991131, b = 152.587130\n",
+ "epoch 1097: loss = 1730958.233866, a = 843.201952, b = 152.586996\n",
+ "epoch 1098: loss = 1730913.521247, a = 843.412353, b = 152.586861\n",
+ "epoch 1099: loss = 1730868.986325, a = 843.622332, b = 152.586727\n",
+ "epoch 1100: loss = 1730824.628393, a = 843.831892, b = 152.586593\n",
+ "epoch 1101: loss = 1730780.446745, a = 844.041032, b = 152.586460\n",
+ "epoch 1102: loss = 1730736.440678, a = 844.249755, b = 152.586327\n",
+ "epoch 1103: loss = 1730692.609494, a = 844.458059, b = 152.586193\n",
+ "epoch 1104: loss = 1730648.952495, a = 844.665948, b = 152.586061\n",
+ "epoch 1105: loss = 1730605.468987, a = 844.873421, b = 152.585928\n",
+ "epoch 1106: loss = 1730562.158279, a = 845.080478, b = 152.585796\n",
+ "epoch 1107: loss = 1730519.019683, a = 845.287122, b = 152.585664\n",
+ "epoch 1108: loss = 1730476.052512, a = 845.493353, b = 152.585532\n",
+ "epoch 1109: loss = 1730433.256083, a = 845.699171, b = 152.585401\n",
+ "epoch 1110: loss = 1730390.629717, a = 845.904578, b = 152.585270\n",
+ "epoch 1111: loss = 1730348.172735, a = 846.109573, b = 152.585139\n",
+ "epoch 1112: loss = 1730305.884463, a = 846.314159, b = 152.585008\n",
+ "epoch 1113: loss = 1730263.764229, a = 846.518336, b = 152.584878\n",
+ "epoch 1114: loss = 1730221.811362, a = 846.722105, b = 152.584747\n",
+ "epoch 1115: loss = 1730180.025197, a = 846.925466, b = 152.584618\n",
+ "epoch 1116: loss = 1730138.405068, a = 847.128420, b = 152.584488\n",
+ "epoch 1117: loss = 1730096.950315, a = 847.330969, b = 152.584359\n",
+ "epoch 1118: loss = 1730055.660278, a = 847.533112, b = 152.584229\n",
+ "epoch 1119: loss = 1730014.534302, a = 847.734852, b = 152.584101\n",
+ "epoch 1120: loss = 1729973.571731, a = 847.936188, b = 152.583972\n",
+ "epoch 1121: loss = 1729932.771917, a = 848.137121, b = 152.583844\n",
+ "epoch 1122: loss = 1729892.134209, a = 848.337652, b = 152.583716\n",
+ "epoch 1123: loss = 1729851.657962, a = 848.537783, b = 152.583588\n",
+ "epoch 1124: loss = 1729811.342534, a = 848.737513, b = 152.583460\n",
+ "epoch 1125: loss = 1729771.187282, a = 848.936844, b = 152.583333\n",
+ "epoch 1126: loss = 1729731.191569, a = 849.135776, b = 152.583206\n",
+ "epoch 1127: loss = 1729691.354760, a = 849.334311, b = 152.583079\n",
+ "epoch 1128: loss = 1729651.676220, a = 849.532449, b = 152.582952\n",
+ "epoch 1129: loss = 1729612.155321, a = 849.730190, b = 152.582826\n",
+ "epoch 1130: loss = 1729572.791433, a = 849.927536, b = 152.582700\n",
+ "epoch 1131: loss = 1729533.583931, a = 850.124487, b = 152.582574\n",
+ "epoch 1132: loss = 1729494.532192, a = 850.321044, b = 152.582449\n",
+ "epoch 1133: loss = 1729455.635596, a = 850.517209, b = 152.582324\n",
+ "epoch 1134: loss = 1729416.893524, a = 850.712981, b = 152.582198\n",
+ "epoch 1135: loss = 1729378.305361, a = 850.908362, b = 152.582074\n",
+ "epoch 1136: loss = 1729339.870493, a = 851.103352, b = 152.581949\n",
+ "epoch 1137: loss = 1729301.588311, a = 851.297952, b = 152.581825\n",
+ "epoch 1138: loss = 1729263.458205, a = 851.492162, b = 152.581701\n",
+ "epoch 1139: loss = 1729225.479569, a = 851.685985, b = 152.581577\n",
+ "epoch 1140: loss = 1729187.651801, a = 851.879420, b = 152.581453\n",
+ "epoch 1141: loss = 1729149.974300, a = 852.072468, b = 152.581330\n",
+ "epoch 1142: loss = 1729112.446466, a = 852.265130, b = 152.581207\n",
+ "epoch 1143: loss = 1729075.067703, a = 852.457407, b = 152.581084\n",
+ "epoch 1144: loss = 1729037.837419, a = 852.649299, b = 152.580962\n",
+ "epoch 1145: loss = 1729000.755020, a = 852.840808, b = 152.580839\n",
+ "epoch 1146: loss = 1728963.819918, a = 853.031934, b = 152.580717\n",
+ "epoch 1147: loss = 1728927.031526, a = 853.222677, b = 152.580596\n",
+ "epoch 1148: loss = 1728890.389260, a = 853.413039, b = 152.580474\n",
+ "epoch 1149: loss = 1728853.892538, a = 853.603021, b = 152.580353\n",
+ "epoch 1150: loss = 1728817.540780, a = 853.792622, b = 152.580232\n",
+ "epoch 1151: loss = 1728781.333408, a = 853.981845, b = 152.580111\n",
+ "epoch 1152: loss = 1728745.269847, a = 854.170689, b = 152.579990\n",
+ "epoch 1153: loss = 1728709.349524, a = 854.359155, b = 152.579870\n",
+ "epoch 1154: loss = 1728673.571869, a = 854.547245, b = 152.579750\n",
+ "epoch 1155: loss = 1728637.936314, a = 854.734958, b = 152.579630\n",
+ "epoch 1156: loss = 1728602.442292, a = 854.922296, b = 152.579510\n",
+ "epoch 1157: loss = 1728567.089239, a = 855.109259, b = 152.579391\n",
+ "epoch 1158: loss = 1728531.876595, a = 855.295849, b = 152.579271\n",
+ "epoch 1159: loss = 1728496.803799, a = 855.482065, b = 152.579152\n",
+ "epoch 1160: loss = 1728461.870295, a = 855.667909, b = 152.579034\n",
+ "epoch 1161: loss = 1728427.075528, a = 855.853382, b = 152.578915\n",
+ "epoch 1162: loss = 1728392.418945, a = 856.038483, b = 152.578797\n",
+ "epoch 1163: loss = 1728357.899996, a = 856.223215, b = 152.578679\n",
+ "epoch 1164: loss = 1728323.518132, a = 856.407577, b = 152.578561\n",
+ "epoch 1165: loss = 1728289.272808, a = 856.591570, b = 152.578444\n",
+ "epoch 1166: loss = 1728255.163480, a = 856.775195, b = 152.578327\n",
+ "epoch 1167: loss = 1728221.189605, a = 856.958454, b = 152.578210\n",
+ "epoch 1168: loss = 1728187.350645, a = 857.141345, b = 152.578093\n",
+ "epoch 1169: loss = 1728153.646062, a = 857.323871, b = 152.577976\n",
+ "epoch 1170: loss = 1728120.075320, a = 857.506033, b = 152.577860\n",
+ "epoch 1171: loss = 1728086.637887, a = 857.687829, b = 152.577744\n",
+ "epoch 1172: loss = 1728053.333232, a = 857.869263, b = 152.577628\n",
+ "epoch 1173: loss = 1728020.160826, a = 858.050333, b = 152.577512\n",
+ "epoch 1174: loss = 1727987.120142, a = 858.231041, b = 152.577397\n",
+ "epoch 1175: loss = 1727954.210655, a = 858.411388, b = 152.577282\n",
+ "epoch 1176: loss = 1727921.431843, a = 858.591375, b = 152.577167\n",
+ "epoch 1177: loss = 1727888.783186, a = 858.771001, b = 152.577052\n",
+ "epoch 1178: loss = 1727856.264164, a = 858.950268, b = 152.576937\n",
+ "epoch 1179: loss = 1727823.874263, a = 859.129177, b = 152.576823\n",
+ "epoch 1180: loss = 1727791.612966, a = 859.307728, b = 152.576709\n",
+ "epoch 1181: loss = 1727759.479763, a = 859.485922, b = 152.576595\n",
+ "epoch 1182: loss = 1727727.474143, a = 859.663760, b = 152.576482\n",
+ "epoch 1183: loss = 1727695.595598, a = 859.841242, b = 152.576368\n",
+ "epoch 1184: loss = 1727663.843621, a = 860.018369, b = 152.576255\n",
+ "epoch 1185: loss = 1727632.217709, a = 860.195142, b = 152.576142\n",
+ "epoch 1186: loss = 1727600.717360, a = 860.371562, b = 152.576030\n",
+ "epoch 1187: loss = 1727569.342073, a = 860.547628, b = 152.575917\n",
+ "epoch 1188: loss = 1727538.091351, a = 860.723343, b = 152.575805\n",
+ "epoch 1189: loss = 1727506.964697, a = 860.898706, b = 152.575693\n",
+ "epoch 1190: loss = 1727475.961618, a = 861.073719, b = 152.575581\n",
+ "epoch 1191: loss = 1727445.081620, a = 861.248381, b = 152.575470\n",
+ "epoch 1192: loss = 1727414.324214, a = 861.422695, b = 152.575358\n",
+ "epoch 1193: loss = 1727383.688912, a = 861.596659, b = 152.575247\n",
+ "epoch 1194: loss = 1727353.175228, a = 861.770276, b = 152.575136\n",
+ "epoch 1195: loss = 1727322.782676, a = 861.943546, b = 152.575026\n",
+ "epoch 1196: loss = 1727292.510775, a = 862.116469, b = 152.574915\n",
+ "epoch 1197: loss = 1727262.359044, a = 862.289047, b = 152.574805\n",
+ "epoch 1198: loss = 1727232.327005, a = 862.461279, b = 152.574695\n",
+ "epoch 1199: loss = 1727202.414181, a = 862.633167, b = 152.574585\n",
+ "epoch 1200: loss = 1727172.620097, a = 862.804711, b = 152.574476\n",
+ "epoch 1201: loss = 1727142.944280, a = 862.975912, b = 152.574366\n",
+ "epoch 1202: loss = 1727113.386259, a = 863.146771, b = 152.574257\n",
+ "epoch 1203: loss = 1727083.945566, a = 863.317288, b = 152.574148\n",
+ "epoch 1204: loss = 1727054.621733, a = 863.487464, b = 152.574039\n",
+ "epoch 1205: loss = 1727025.414294, a = 863.657300, b = 152.573931\n",
+ "epoch 1206: loss = 1726996.322787, a = 863.826797, b = 152.573823\n",
+ "epoch 1207: loss = 1726967.346749, a = 863.995954, b = 152.573715\n",
+ "epoch 1208: loss = 1726938.485720, a = 864.164773, b = 152.573607\n",
+ "epoch 1209: loss = 1726909.739243, a = 864.333255, b = 152.573499\n",
+ "epoch 1210: loss = 1726881.106862, a = 864.501399, b = 152.573392\n",
+ "epoch 1211: loss = 1726852.588122, a = 864.669208, b = 152.573285\n",
+ "epoch 1212: loss = 1726824.182571, a = 864.836680, b = 152.573178\n",
+ "epoch 1213: loss = 1726795.889757, a = 865.003818, b = 152.573071\n",
+ "epoch 1214: loss = 1726767.709233, a = 865.170622, b = 152.572964\n",
+ "epoch 1215: loss = 1726739.640550, a = 865.337092, b = 152.572858\n",
+ "epoch 1216: loss = 1726711.683264, a = 865.503229, b = 152.572752\n",
+ "epoch 1217: loss = 1726683.836931, a = 865.669034, b = 152.572646\n",
+ "epoch 1218: loss = 1726656.101109, a = 865.834508, b = 152.572540\n",
+ "epoch 1219: loss = 1726628.475358, a = 865.999650, b = 152.572435\n",
+ "epoch 1220: loss = 1726600.959240, a = 866.164463, b = 152.572330\n",
+ "epoch 1221: loss = 1726573.552318, a = 866.328946, b = 152.572225\n",
+ "epoch 1222: loss = 1726546.254158, a = 866.493100, b = 152.572120\n",
+ "epoch 1223: loss = 1726519.064326, a = 866.656925, b = 152.572015\n",
+ "epoch 1224: loss = 1726491.982391, a = 866.820423, b = 152.571911\n",
+ "epoch 1225: loss = 1726465.007924, a = 866.983594, b = 152.571807\n",
+ "epoch 1226: loss = 1726438.140496, a = 867.146439, b = 152.571702\n",
+ "epoch 1227: loss = 1726411.379682, a = 867.308958, b = 152.571599\n",
+ "epoch 1228: loss = 1726384.725056, a = 867.471152, b = 152.571495\n",
+ "epoch 1229: loss = 1726358.176197, a = 867.633022, b = 152.571392\n",
+ "epoch 1230: loss = 1726331.732682, a = 867.794568, b = 152.571289\n",
+ "epoch 1231: loss = 1726305.394093, a = 867.955792, b = 152.571186\n",
+ "epoch 1232: loss = 1726279.160012, a = 868.116692, b = 152.571083\n",
+ "epoch 1233: loss = 1726253.030023, a = 868.277271, b = 152.570980\n",
+ "epoch 1234: loss = 1726227.003711, a = 868.437529, b = 152.570878\n",
+ "epoch 1235: loss = 1726201.080663, a = 868.597467, b = 152.570776\n",
+ "epoch 1236: loss = 1726175.260468, a = 868.757084, b = 152.570674\n",
+ "epoch 1237: loss = 1726149.542718, a = 868.916383, b = 152.570572\n",
+ "epoch 1238: loss = 1726123.927003, a = 869.075362, b = 152.570471\n",
+ "epoch 1239: loss = 1726098.412918, a = 869.234024, b = 152.570369\n",
+ "epoch 1240: loss = 1726073.000058, a = 869.392369, b = 152.570268\n",
+ "epoch 1241: loss = 1726047.688020, a = 869.550397, b = 152.570167\n",
+ "epoch 1242: loss = 1726022.476403, a = 869.708109, b = 152.570066\n",
+ "epoch 1243: loss = 1725997.364807, a = 869.865506, b = 152.569966\n",
+ "epoch 1244: loss = 1725972.352833, a = 870.022588, b = 152.569866\n",
+ "epoch 1245: loss = 1725947.440086, a = 870.179356, b = 152.569765\n",
+ "epoch 1246: loss = 1725922.626169, a = 870.335810, b = 152.569665\n",
+ "epoch 1247: loss = 1725897.910690, a = 870.491951, b = 152.569566\n",
+ "epoch 1248: loss = 1725873.293257, a = 870.647781, b = 152.569466\n",
+ "epoch 1249: loss = 1725848.773479, a = 870.803298, b = 152.569367\n",
+ "epoch 1250: loss = 1725824.350968, a = 870.958505, b = 152.569268\n",
+ "epoch 1251: loss = 1725800.025336, a = 871.113401, b = 152.569169\n",
+ "epoch 1252: loss = 1725775.796198, a = 871.267988, b = 152.569070\n",
+ "epoch 1253: loss = 1725751.663170, a = 871.422265, b = 152.568972\n",
+ "epoch 1254: loss = 1725727.625869, a = 871.576234, b = 152.568873\n",
+ "epoch 1255: loss = 1725703.683913, a = 871.729895, b = 152.568775\n",
+ "epoch 1256: loss = 1725679.836924, a = 871.883249, b = 152.568677\n",
+ "epoch 1257: loss = 1725656.084523, a = 872.036296, b = 152.568579\n",
+ "epoch 1258: loss = 1725632.426334, a = 872.189037, b = 152.568482\n",
+ "epoch 1259: loss = 1725608.861981, a = 872.341473, b = 152.568384\n",
+ "epoch 1260: loss = 1725585.391092, a = 872.493604, b = 152.568287\n",
+ "epoch 1261: loss = 1725562.013294, a = 872.645430, b = 152.568190\n",
+ "epoch 1262: loss = 1725538.728217, a = 872.796953, b = 152.568094\n",
+ "epoch 1263: loss = 1725515.535491, a = 872.948173, b = 152.567997\n",
+ "epoch 1264: loss = 1725492.434749, a = 873.099091, b = 152.567901\n",
+ "epoch 1265: loss = 1725469.425625, a = 873.249707, b = 152.567804\n",
+ "epoch 1266: loss = 1725446.507753, a = 873.400021, b = 152.567708\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "epoch 1267: loss = 1725423.680772, a = 873.550035, b = 152.567613\n",
+ "epoch 1268: loss = 1725400.944319, a = 873.699749, b = 152.567517\n",
+ "epoch 1269: loss = 1725378.298033, a = 873.849164, b = 152.567421\n",
+ "epoch 1270: loss = 1725355.741556, a = 873.998280, b = 152.567326\n",
+ "epoch 1271: loss = 1725333.274530, a = 874.147098, b = 152.567231\n",
+ "epoch 1272: loss = 1725310.896600, a = 874.295618, b = 152.567136\n",
+ "epoch 1273: loss = 1725288.607410, a = 874.443841, b = 152.567042\n",
+ "epoch 1274: loss = 1725266.406608, a = 874.591768, b = 152.566947\n",
+ "epoch 1275: loss = 1725244.293841, a = 874.739399, b = 152.566853\n",
+ "epoch 1276: loss = 1725222.268760, a = 874.886735, b = 152.566759\n",
+ "epoch 1277: loss = 1725200.331014, a = 875.033776, b = 152.566665\n",
+ "epoch 1278: loss = 1725178.480257, a = 875.180523, b = 152.566571\n",
+ "epoch 1279: loss = 1725156.716143, a = 875.326977, b = 152.566478\n",
+ "epoch 1280: loss = 1725135.038326, a = 875.473137, b = 152.566384\n",
+ "epoch 1281: loss = 1725113.446463, a = 875.619006, b = 152.566291\n",
+ "epoch 1282: loss = 1725091.940212, a = 875.764583, b = 152.566198\n",
+ "epoch 1283: loss = 1725070.519232, a = 875.909868, b = 152.566105\n",
+ "epoch 1284: loss = 1725049.183184, a = 876.054864, b = 152.566013\n",
+ "epoch 1285: loss = 1725027.931730, a = 876.199569, b = 152.565920\n",
+ "epoch 1286: loss = 1725006.764533, a = 876.343985, b = 152.565828\n",
+ "epoch 1287: loss = 1724985.681258, a = 876.488112, b = 152.565736\n",
+ "epoch 1288: loss = 1724964.681570, a = 876.631951, b = 152.565644\n",
+ "epoch 1289: loss = 1724943.765137, a = 876.775502, b = 152.565552\n",
+ "epoch 1290: loss = 1724922.931629, a = 876.918766, b = 152.565461\n",
+ "epoch 1291: loss = 1724902.180714, a = 877.061744, b = 152.565370\n",
+ "epoch 1292: loss = 1724881.512064, a = 877.204436, b = 152.565278\n",
+ "epoch 1293: loss = 1724860.925351, a = 877.346842, b = 152.565188\n",
+ "epoch 1294: loss = 1724840.420250, a = 877.488964, b = 152.565097\n",
+ "epoch 1295: loss = 1724819.996436, a = 877.630802, b = 152.565006\n",
+ "epoch 1296: loss = 1724799.653585, a = 877.772356, b = 152.564916\n",
+ "epoch 1297: loss = 1724779.391376, a = 877.913626, b = 152.564826\n",
+ "epoch 1298: loss = 1724759.209486, a = 878.054615, b = 152.564735\n",
+ "epoch 1299: loss = 1724739.107597, a = 878.195321, b = 152.564646\n",
+ "epoch 1300: loss = 1724719.085390, a = 878.335746, b = 152.564556\n",
+ "epoch 1301: loss = 1724699.142548, a = 878.475891, b = 152.564466\n",
+ "epoch 1302: loss = 1724679.278756, a = 878.615755, b = 152.564377\n",
+ "epoch 1303: loss = 1724659.493698, a = 878.755339, b = 152.564288\n",
+ "epoch 1304: loss = 1724639.787061, a = 878.894644, b = 152.564199\n",
+ "epoch 1305: loss = 1724620.158533, a = 879.033671, b = 152.564110\n",
+ "epoch 1306: loss = 1724600.607805, a = 879.172419, b = 152.564022\n",
+ "epoch 1307: loss = 1724581.134564, a = 879.310891, b = 152.563933\n",
+ "epoch 1308: loss = 1724561.738505, a = 879.449085, b = 152.563845\n",
+ "epoch 1309: loss = 1724542.419319, a = 879.587003, b = 152.563757\n",
+ "epoch 1310: loss = 1724523.176700, a = 879.724645, b = 152.563669\n",
+ "epoch 1311: loss = 1724504.010344, a = 879.862012, b = 152.563581\n",
+ "epoch 1312: loss = 1724484.919948, a = 879.999104, b = 152.563494\n",
+ "epoch 1313: loss = 1724465.905208, a = 880.135922, b = 152.563406\n",
+ "epoch 1314: loss = 1724446.965825, a = 880.272467, b = 152.563319\n",
+ "epoch 1315: loss = 1724428.101498, a = 880.408738, b = 152.563232\n",
+ "epoch 1316: loss = 1724409.311929, a = 880.544737, b = 152.563145\n",
+ "epoch 1317: loss = 1724390.596819, a = 880.680464, b = 152.563058\n",
+ "epoch 1318: loss = 1724371.955874, a = 880.815920, b = 152.562972\n",
+ "epoch 1319: loss = 1724353.388797, a = 880.951104, b = 152.562886\n",
+ "epoch 1320: loss = 1724334.895295, a = 881.086019, b = 152.562799\n",
+ "epoch 1321: loss = 1724316.475075, a = 881.220663, b = 152.562713\n",
+ "epoch 1322: loss = 1724298.127846, a = 881.355039, b = 152.562628\n",
+ "epoch 1323: loss = 1724279.853317, a = 881.489145, b = 152.562542\n",
+ "epoch 1324: loss = 1724261.651198, a = 881.622984, b = 152.562456\n",
+ "epoch 1325: loss = 1724243.521203, a = 881.756555, b = 152.562371\n",
+ "epoch 1326: loss = 1724225.463043, a = 881.889859, b = 152.562286\n",
+ "epoch 1327: loss = 1724207.476433, a = 882.022896, b = 152.562201\n",
+ "epoch 1328: loss = 1724189.561089, a = 882.155667, b = 152.562116\n",
+ "epoch 1329: loss = 1724171.716726, a = 882.288173, b = 152.562032\n",
+ "epoch 1330: loss = 1724153.943063, a = 882.420413, b = 152.561947\n",
+ "epoch 1331: loss = 1724136.239817, a = 882.552390, b = 152.561863\n",
+ "epoch 1332: loss = 1724118.606710, a = 882.684102, b = 152.561779\n",
+ "epoch 1333: loss = 1724101.043462, a = 882.815551, b = 152.561695\n",
+ "epoch 1334: loss = 1724083.549795, a = 882.946737, b = 152.561611\n",
+ "epoch 1335: loss = 1724066.125431, a = 883.077661, b = 152.561527\n",
+ "epoch 1336: loss = 1724048.770097, a = 883.208323, b = 152.561444\n",
+ "epoch 1337: loss = 1724031.483516, a = 883.338724, b = 152.561361\n",
+ "epoch 1338: loss = 1724014.265415, a = 883.468864, b = 152.561277\n",
+ "epoch 1339: loss = 1723997.115522, a = 883.598743, b = 152.561194\n",
+ "epoch 1340: loss = 1723980.033566, a = 883.728363, b = 152.561112\n",
+ "epoch 1341: loss = 1723963.019276, a = 883.857724, b = 152.561029\n",
+ "epoch 1342: loss = 1723946.072383, a = 883.986826, b = 152.560947\n",
+ "epoch 1343: loss = 1723929.192619, a = 884.115670, b = 152.560864\n",
+ "epoch 1344: loss = 1723912.379717, a = 884.244256, b = 152.560782\n",
+ "epoch 1345: loss = 1723895.633411, a = 884.372586, b = 152.560700\n",
+ "epoch 1346: loss = 1723878.953436, a = 884.500658, b = 152.560618\n",
+ "epoch 1347: loss = 1723862.339528, a = 884.628475, b = 152.560537\n",
+ "epoch 1348: loss = 1723845.791425, a = 884.756036, b = 152.560455\n",
+ "epoch 1349: loss = 1723829.308864, a = 884.883341, b = 152.560374\n",
+ "epoch 1350: loss = 1723812.891585, a = 885.010393, b = 152.560293\n",
+ "epoch 1351: loss = 1723796.539328, a = 885.137190, b = 152.560212\n",
+ "epoch 1352: loss = 1723780.251834, a = 885.263733, b = 152.560131\n",
+ "epoch 1353: loss = 1723764.028847, a = 885.390024, b = 152.560050\n",
+ "epoch 1354: loss = 1723747.870109, a = 885.516062, b = 152.559970\n",
+ "epoch 1355: loss = 1723731.775364, a = 885.641848, b = 152.559890\n",
+ "epoch 1356: loss = 1723715.744359, a = 885.767382, b = 152.559809\n",
+ "epoch 1357: loss = 1723699.776840, a = 885.892666, b = 152.559729\n",
+ "epoch 1358: loss = 1723683.872554, a = 886.017699, b = 152.559649\n",
+ "epoch 1359: loss = 1723668.031249, a = 886.142482, b = 152.559570\n",
+ "epoch 1360: loss = 1723652.252676, a = 886.267015, b = 152.559490\n",
+ "epoch 1361: loss = 1723636.536584, a = 886.391299, b = 152.559411\n",
+ "epoch 1362: loss = 1723620.882726, a = 886.515335, b = 152.559332\n",
+ "epoch 1363: loss = 1723605.290853, a = 886.639123, b = 152.559253\n",
+ "epoch 1364: loss = 1723589.760719, a = 886.762663, b = 152.559174\n",
+ "epoch 1365: loss = 1723574.292078, a = 886.885956, b = 152.559095\n",
+ "epoch 1366: loss = 1723558.884687, a = 887.009003, b = 152.559016\n",
+ "epoch 1367: loss = 1723543.538300, a = 887.131804, b = 152.558938\n",
+ "epoch 1368: loss = 1723528.252677, a = 887.254359, b = 152.558860\n",
+ "epoch 1369: loss = 1723513.027574, a = 887.376669, b = 152.558782\n",
+ "epoch 1370: loss = 1723497.862752, a = 887.498734, b = 152.558704\n",
+ "epoch 1371: loss = 1723482.757971, a = 887.620555, b = 152.558626\n",
+ "epoch 1372: loss = 1723467.712991, a = 887.742133, b = 152.558548\n",
+ "epoch 1373: loss = 1723452.727575, a = 887.863468, b = 152.558471\n",
+ "epoch 1374: loss = 1723437.801486, a = 887.984560, b = 152.558393\n",
+ "epoch 1375: loss = 1723422.934489, a = 888.105410, b = 152.558316\n",
+ "epoch 1376: loss = 1723408.126347, a = 888.226018, b = 152.558239\n",
+ "epoch 1377: loss = 1723393.376828, a = 888.346385, b = 152.558162\n",
+ "epoch 1378: loss = 1723378.685697, a = 888.466511, b = 152.558085\n",
+ "epoch 1379: loss = 1723364.052724, a = 888.586397, b = 152.558009\n",
+ "epoch 1380: loss = 1723349.477675, a = 888.706043, b = 152.557932\n",
+ "epoch 1381: loss = 1723334.960322, a = 888.825451, b = 152.557856\n",
+ "epoch 1382: loss = 1723320.500434, a = 888.944619, b = 152.557780\n",
+ "epoch 1383: loss = 1723306.097784, a = 889.063549, b = 152.557704\n",
+ "epoch 1384: loss = 1723291.752143, a = 889.182241, b = 152.557628\n",
+ "epoch 1385: loss = 1723277.463285, a = 889.300696, b = 152.557553\n",
+ "epoch 1386: loss = 1723263.230984, a = 889.418914, b = 152.557477\n",
+ "epoch 1387: loss = 1723249.055015, a = 889.536895, b = 152.557402\n",
+ "epoch 1388: loss = 1723234.935154, a = 889.654641, b = 152.557327\n",
+ "epoch 1389: loss = 1723220.871178, a = 889.772151, b = 152.557252\n",
+ "epoch 1390: loss = 1723206.862865, a = 889.889427, b = 152.557177\n",
+ "epoch 1391: loss = 1723192.909994, a = 890.006467, b = 152.557102\n",
+ "epoch 1392: loss = 1723179.012343, a = 890.123274, b = 152.557027\n",
+ "epoch 1393: loss = 1723165.169694, a = 890.239847, b = 152.556953\n",
+ "epoch 1394: loss = 1723151.381827, a = 890.356187, b = 152.556879\n",
+ "epoch 1395: loss = 1723137.648526, a = 890.472294, b = 152.556804\n",
+ "epoch 1396: loss = 1723123.969572, a = 890.588170, b = 152.556730\n",
+ "epoch 1397: loss = 1723110.344750, a = 890.703813, b = 152.556656\n",
+ "epoch 1398: loss = 1723096.773845, a = 890.819225, b = 152.556583\n",
+ "epoch 1399: loss = 1723083.256642, a = 890.934407, b = 152.556509\n",
+ "epoch 1400: loss = 1723069.792927, a = 891.049358, b = 152.556436\n",
+ "epoch 1401: loss = 1723056.382489, a = 891.164079, b = 152.556363\n",
+ "epoch 1402: loss = 1723043.025115, a = 891.278571, b = 152.556289\n",
+ "epoch 1403: loss = 1723029.720594, a = 891.392834, b = 152.556216\n",
+ "epoch 1404: loss = 1723016.468716, a = 891.506868, b = 152.556144\n",
+ "epoch 1405: loss = 1723003.269272, a = 891.620675, b = 152.556071\n",
+ "epoch 1406: loss = 1722990.122053, a = 891.734253, b = 152.555998\n",
+ "epoch 1407: loss = 1722977.026852, a = 891.847605, b = 152.555926\n",
+ "epoch 1408: loss = 1722963.983461, a = 891.960730, b = 152.555854\n",
+ "epoch 1409: loss = 1722950.991676, a = 892.073629, b = 152.555782\n",
+ "epoch 1410: loss = 1722938.051290, a = 892.186302, b = 152.555710\n",
+ "epoch 1411: loss = 1722925.162100, a = 892.298750, b = 152.555638\n",
+ "epoch 1412: loss = 1722912.323901, a = 892.410972, b = 152.555566\n",
+ "epoch 1413: loss = 1722899.536492, a = 892.522971, b = 152.555495\n",
+ "epoch 1414: loss = 1722886.799670, a = 892.634745, b = 152.555423\n",
+ "epoch 1415: loss = 1722874.113234, a = 892.746296, b = 152.555352\n",
+ "epoch 1416: loss = 1722861.476984, a = 892.857624, b = 152.555281\n",
+ "epoch 1417: loss = 1722848.890720, a = 892.968730, b = 152.555210\n",
+ "epoch 1418: loss = 1722836.354243, a = 893.079613, b = 152.555139\n",
+ "epoch 1419: loss = 1722823.867356, a = 893.190274, b = 152.555068\n",
+ "epoch 1420: loss = 1722811.429862, a = 893.300714, b = 152.554998\n",
+ "epoch 1421: loss = 1722799.041564, a = 893.410934, b = 152.554927\n",
+ "epoch 1422: loss = 1722786.702267, a = 893.520932, b = 152.554857\n",
+ "epoch 1423: loss = 1722774.411775, a = 893.630711, b = 152.554787\n",
+ "epoch 1424: loss = 1722762.169895, a = 893.740271, b = 152.554717\n",
+ "epoch 1425: loss = 1722749.976434, a = 893.849611, b = 152.554647\n",
+ "epoch 1426: loss = 1722737.831199, a = 893.958733, b = 152.554578\n",
+ "epoch 1427: loss = 1722725.733998, a = 894.067636, b = 152.554508\n",
+ "epoch 1428: loss = 1722713.684641, a = 894.176322, b = 152.554439\n",
+ "epoch 1429: loss = 1722701.682937, a = 894.284790, b = 152.554369\n",
+ "epoch 1430: loss = 1722689.728697, a = 894.393042, b = 152.554300\n",
+ "epoch 1431: loss = 1722677.821732, a = 894.501077, b = 152.554231\n",
+ "epoch 1432: loss = 1722665.961855, a = 894.608895, b = 152.554162\n",
+ "epoch 1433: loss = 1722654.148878, a = 894.716499, b = 152.554094\n",
+ "epoch 1434: loss = 1722642.382614, a = 894.823887, b = 152.554025\n",
+ "epoch 1435: loss = 1722630.662879, a = 894.931060, b = 152.553957\n",
+ "epoch 1436: loss = 1722618.989486, a = 895.038020, b = 152.553888\n",
+ "epoch 1437: loss = 1722607.362253, a = 895.144765, b = 152.553820\n",
+ "epoch 1438: loss = 1722595.780995, a = 895.251297, b = 152.553752\n",
+ "epoch 1439: loss = 1722584.245530, a = 895.357615, b = 152.553684\n",
+ "epoch 1440: loss = 1722572.755676, a = 895.463721, b = 152.553616\n",
+ "epoch 1441: loss = 1722561.311251, a = 895.569615, b = 152.553549\n",
+ "epoch 1442: loss = 1722549.912075, a = 895.675298, b = 152.553481\n",
+ "epoch 1443: loss = 1722538.557968, a = 895.780769, b = 152.553414\n",
+ "epoch 1444: loss = 1722527.248752, a = 895.886029, b = 152.553347\n",
+ "epoch 1445: loss = 1722515.984246, a = 895.991078, b = 152.553280\n",
+ "epoch 1446: loss = 1722504.764275, a = 896.095917, b = 152.553213\n",
+ "epoch 1447: loss = 1722493.588661, a = 896.200547, b = 152.553146\n",
+ "epoch 1448: loss = 1722482.457227, a = 896.304968, b = 152.553079\n",
+ "epoch 1449: loss = 1722471.369798, a = 896.409180, b = 152.553012\n",
+ "epoch 1450: loss = 1722460.326199, a = 896.513183, b = 152.552946\n",
+ "epoch 1451: loss = 1722449.326257, a = 896.616978, b = 152.552880\n",
+ "epoch 1452: loss = 1722438.369797, a = 896.720566, b = 152.552814\n",
+ "epoch 1453: loss = 1722427.456646, a = 896.823947, b = 152.552748\n",
+ "epoch 1454: loss = 1722416.586633, a = 896.927121, b = 152.552682\n",
+ "epoch 1455: loss = 1722405.759587, a = 897.030088, b = 152.552616\n",
+ "epoch 1456: loss = 1722394.975336, a = 897.132850, b = 152.552550\n",
+ "epoch 1457: loss = 1722384.233710, a = 897.235407, b = 152.552485\n",
+ "epoch 1458: loss = 1722373.534540, a = 897.337758, b = 152.552419\n",
+ "epoch 1459: loss = 1722362.877657, a = 897.439904, b = 152.552354\n",
+ "epoch 1460: loss = 1722352.262894, a = 897.541846, b = 152.552289\n",
+ "epoch 1461: loss = 1722341.690083, a = 897.643585, b = 152.552224\n",
+ "epoch 1462: loss = 1722331.159057, a = 897.745120, b = 152.552159\n",
+ "epoch 1463: loss = 1722320.669650, a = 897.846452, b = 152.552095\n",
+ "epoch 1464: loss = 1722310.221696, a = 897.947581, b = 152.552030\n",
+ "epoch 1465: loss = 1722299.815032, a = 898.048508, b = 152.551965\n",
+ "epoch 1466: loss = 1722289.449493, a = 898.149233, b = 152.551901\n",
+ "epoch 1467: loss = 1722279.124916, a = 898.249757, b = 152.551837\n",
+ "epoch 1468: loss = 1722268.841137, a = 898.350080, b = 152.551773\n",
+ "epoch 1469: loss = 1722258.597995, a = 898.450202, b = 152.551709\n",
+ "epoch 1470: loss = 1722248.395329, a = 898.550124, b = 152.551645\n",
+ "epoch 1471: loss = 1722238.232977, a = 898.649846, b = 152.551581\n",
+ "epoch 1472: loss = 1722228.110779, a = 898.749369, b = 152.551518\n",
+ "epoch 1473: loss = 1722218.028576, a = 898.848693, b = 152.551454\n",
+ "epoch 1474: loss = 1722207.986209, a = 898.947818, b = 152.551391\n",
+ "epoch 1475: loss = 1722197.983520, a = 899.046745, b = 152.551328\n",
+ "epoch 1476: loss = 1722188.020350, a = 899.145474, b = 152.551265\n",
+ "epoch 1477: loss = 1722178.096544, a = 899.244006, b = 152.551202\n",
+ "epoch 1478: loss = 1722168.211944, a = 899.342341, b = 152.551139\n",
+ "epoch 1479: loss = 1722158.366395, a = 899.440479, b = 152.551076\n",
+ "epoch 1480: loss = 1722148.559742, a = 899.538420, b = 152.551014\n",
+ "epoch 1481: loss = 1722138.791830, a = 899.636166, b = 152.550951\n",
+ "epoch 1482: loss = 1722129.062505, a = 899.733717, b = 152.550889\n",
+ "epoch 1483: loss = 1722119.371614, a = 899.831072, b = 152.550827\n",
+ "epoch 1484: loss = 1722109.719005, a = 899.928233, b = 152.550765\n",
+ "epoch 1485: loss = 1722100.104525, a = 900.025199, b = 152.550703\n",
+ "epoch 1486: loss = 1722090.528022, a = 900.121972, b = 152.550641\n",
+ "epoch 1487: loss = 1722080.989347, a = 900.218551, b = 152.550579\n",
+ "epoch 1488: loss = 1722071.488348, a = 900.314937, b = 152.550518\n",
+ "epoch 1489: loss = 1722062.024876, a = 900.411130, b = 152.550456\n",
+ "epoch 1490: loss = 1722052.598782, a = 900.507131, b = 152.550395\n",
+ "epoch 1491: loss = 1722043.209917, a = 900.602939, b = 152.550334\n",
+ "epoch 1492: loss = 1722033.858134, a = 900.698557, b = 152.550273\n",
+ "epoch 1493: loss = 1722024.543285, a = 900.793983, b = 152.550212\n",
+ "epoch 1494: loss = 1722015.265224, a = 900.889218, b = 152.550151\n",
+ "epoch 1495: loss = 1722006.023804, a = 900.984263, b = 152.550090\n",
+ "epoch 1496: loss = 1721996.818880, a = 901.079117, b = 152.550030\n",
+ "epoch 1497: loss = 1721987.650307, a = 901.173782, b = 152.549969\n",
+ "epoch 1498: loss = 1721978.517941, a = 901.268258, b = 152.549909\n",
+ "epoch 1499: loss = 1721969.421637, a = 901.362545, b = 152.549849\n",
+ "epoch 1500: loss = 1721960.361253, a = 901.456643, b = 152.549789\n",
+ "epoch 1501: loss = 1721951.336645, a = 901.550553, b = 152.549729\n",
+ "epoch 1502: loss = 1721942.347673, a = 901.644276, b = 152.549669\n",
+ "epoch 1503: loss = 1721933.394193, a = 901.737811, b = 152.549609\n",
+ "epoch 1504: loss = 1721924.476066, a = 901.831159, b = 152.549549\n",
+ "epoch 1505: loss = 1721915.593151, a = 901.924320, b = 152.549490\n",
+ "epoch 1506: loss = 1721906.745308, a = 902.017295, b = 152.549431\n",
+ "epoch 1507: loss = 1721897.932397, a = 902.110084, b = 152.549371\n",
+ "epoch 1508: loss = 1721889.154280, a = 902.202687, b = 152.549312\n",
+ "epoch 1509: loss = 1721880.410820, a = 902.295105, b = 152.549253\n",
+ "epoch 1510: loss = 1721871.701877, a = 902.387339, b = 152.549194\n",
+ "epoch 1511: loss = 1721863.027315, a = 902.479388, b = 152.549135\n",
+ "epoch 1512: loss = 1721854.386998, a = 902.571253, b = 152.549077\n",
+ "epoch 1513: loss = 1721845.780790, a = 902.662934, b = 152.549018\n",
+ "epoch 1514: loss = 1721837.208555, a = 902.754432, b = 152.548960\n",
+ "epoch 1515: loss = 1721828.670157, a = 902.845747, b = 152.548901\n",
+ "epoch 1516: loss = 1721820.165464, a = 902.936879, b = 152.548843\n",
+ "epoch 1517: loss = 1721811.694341, a = 903.027829, b = 152.548785\n",
+ "epoch 1518: loss = 1721803.256654, a = 903.118598, b = 152.548727\n",
+ "epoch 1519: loss = 1721794.852271, a = 903.209184, b = 152.548669\n",
+ "epoch 1520: loss = 1721786.481060, a = 903.299590, b = 152.548612\n",
+ "epoch 1521: loss = 1721778.142889, a = 903.389815, b = 152.548554\n",
+ "epoch 1522: loss = 1721769.837627, a = 903.479859, b = 152.548496\n",
+ "epoch 1523: loss = 1721761.565142, a = 903.569724, b = 152.548439\n",
+ "epoch 1524: loss = 1721753.325306, a = 903.659408, b = 152.548382\n",
+ "epoch 1525: loss = 1721745.117988, a = 903.748914, b = 152.548325\n",
+ "epoch 1526: loss = 1721736.943059, a = 903.838240, b = 152.548268\n",
+ "epoch 1527: loss = 1721728.800390, a = 903.927388, b = 152.548211\n",
+ "epoch 1528: loss = 1721720.689854, a = 904.016357, b = 152.548154\n",
+ "epoch 1529: loss = 1721712.611323, a = 904.105149, b = 152.548097\n",
+ "epoch 1530: loss = 1721704.564670, a = 904.193763, b = 152.548041\n",
+ "epoch 1531: loss = 1721696.549768, a = 904.282199, b = 152.547984\n",
+ "epoch 1532: loss = 1721688.566492, a = 904.370459, b = 152.547928\n",
+ "epoch 1533: loss = 1721680.614715, a = 904.458543, b = 152.547871\n",
+ "epoch 1534: loss = 1721672.694312, a = 904.546450, b = 152.547815\n",
+ "epoch 1535: loss = 1721664.805160, a = 904.634182, b = 152.547759\n",
+ "epoch 1536: loss = 1721656.947133, a = 904.721738, b = 152.547703\n",
+ "epoch 1537: loss = 1721649.120109, a = 904.809119, b = 152.547647\n",
+ "epoch 1538: loss = 1721641.323964, a = 904.896325, b = 152.547592\n",
+ "epoch 1539: loss = 1721633.558576, a = 904.983357, b = 152.547536\n",
+ "epoch 1540: loss = 1721625.823823, a = 905.070215, b = 152.547481\n",
+ "epoch 1541: loss = 1721618.119582, a = 905.156899, b = 152.547425\n",
+ "epoch 1542: loss = 1721610.445734, a = 905.243410, b = 152.547370\n",
+ "epoch 1543: loss = 1721602.802156, a = 905.329748, b = 152.547315\n",
+ "epoch 1544: loss = 1721595.188730, a = 905.415913, b = 152.547260\n",
+ "epoch 1545: loss = 1721587.605335, a = 905.501906, b = 152.547205\n",
+ "epoch 1546: loss = 1721580.051852, a = 905.587727, b = 152.547150\n",
+ "epoch 1547: loss = 1721572.528163, a = 905.673376, b = 152.547095\n",
+ "epoch 1548: loss = 1721565.034149, a = 905.758854, b = 152.547041\n",
+ "epoch 1549: loss = 1721557.569692, a = 905.844161, b = 152.546986\n",
+ "epoch 1550: loss = 1721550.134675, a = 905.929298, b = 152.546932\n",
+ "epoch 1551: loss = 1721542.728982, a = 906.014264, b = 152.546878\n",
+ "epoch 1552: loss = 1721535.352495, a = 906.099060, b = 152.546824\n",
+ "epoch 1553: loss = 1721528.005099, a = 906.183687, b = 152.546770\n",
+ "epoch 1554: loss = 1721520.686678, a = 906.268145, b = 152.546716\n",
+ "epoch 1555: loss = 1721513.397118, a = 906.352433, b = 152.546662\n",
+ "epoch 1556: loss = 1721506.136304, a = 906.436553, b = 152.546608\n",
+ "epoch 1557: loss = 1721498.904121, a = 906.520505, b = 152.546554\n",
+ "epoch 1558: loss = 1721491.700457, a = 906.604289, b = 152.546501\n",
+ "epoch 1559: loss = 1721484.525197, a = 906.687906, b = 152.546448\n",
+ "epoch 1560: loss = 1721477.378230, a = 906.771355, b = 152.546394\n",
+ "epoch 1561: loss = 1721470.259443, a = 906.854638, b = 152.546341\n",
+ "epoch 1562: loss = 1721463.168723, a = 906.937754, b = 152.546288\n",
+ "epoch 1563: loss = 1721456.105960, a = 907.020703, b = 152.546235\n",
+ "epoch 1564: loss = 1721449.071043, a = 907.103487, b = 152.546182\n",
+ "epoch 1565: loss = 1721442.063862, a = 907.186106, b = 152.546129\n",
+ "epoch 1566: loss = 1721435.084305, a = 907.268559, b = 152.546077\n",
+ "epoch 1567: loss = 1721428.132264, a = 907.350847, b = 152.546024\n",
+ "epoch 1568: loss = 1721421.207629, a = 907.432970, b = 152.545972\n",
+ "epoch 1569: loss = 1721414.310292, a = 907.514930, b = 152.545919\n",
+ "epoch 1570: loss = 1721407.440144, a = 907.596725, b = 152.545867\n",
+ "epoch 1571: loss = 1721400.597077, a = 907.678357, b = 152.545815\n",
+ "epoch 1572: loss = 1721393.780984, a = 907.759826, b = 152.545763\n",
+ "epoch 1573: loss = 1721386.991758, a = 907.841132, b = 152.545711\n",
+ "epoch 1574: loss = 1721380.229293, a = 907.922275, b = 152.545659\n",
+ "epoch 1575: loss = 1721373.493481, a = 908.003256, b = 152.545607\n",
+ "epoch 1576: loss = 1721366.784218, a = 908.084075, b = 152.545556\n",
+ "epoch 1577: loss = 1721360.101397, a = 908.164733, b = 152.545504\n",
+ "epoch 1578: loss = 1721353.444915, a = 908.245229, b = 152.545453\n",
+ "epoch 1579: loss = 1721346.814666, a = 908.325564, b = 152.545402\n",
+ "epoch 1580: loss = 1721340.210546, a = 908.405739, b = 152.545350\n",
+ "epoch 1581: loss = 1721333.632452, a = 908.485753, b = 152.545299\n",
+ "epoch 1582: loss = 1721327.080281, a = 908.565607, b = 152.545248\n",
+ "epoch 1583: loss = 1721320.553929, a = 908.645302, b = 152.545197\n",
+ "epoch 1584: loss = 1721314.053295, a = 908.724837, b = 152.545147\n",
+ "epoch 1585: loss = 1721307.578275, a = 908.804213, b = 152.545096\n",
+ "epoch 1586: loss = 1721301.128770, a = 908.883430, b = 152.545045\n",
+ "epoch 1587: loss = 1721294.704676, a = 908.962489, b = 152.544995\n",
+ "epoch 1588: loss = 1721288.305894, a = 909.041390, b = 152.544944\n",
+ "epoch 1589: loss = 1721281.932323, a = 909.120133, b = 152.544894\n",
+ "epoch 1590: loss = 1721275.583863, a = 909.198719, b = 152.544844\n",
+ "epoch 1591: loss = 1721269.260415, a = 909.277148, b = 152.544794\n",
+ "epoch 1592: loss = 1721262.961879, a = 909.355419, b = 152.544744\n",
+ "epoch 1593: loss = 1721256.688156, a = 909.433534, b = 152.544694\n",
+ "epoch 1594: loss = 1721250.439148, a = 909.511493, b = 152.544644\n",
+ "epoch 1595: loss = 1721244.214757, a = 909.589296, b = 152.544594\n",
+ "epoch 1596: loss = 1721238.014885, a = 909.666944, b = 152.544545\n",
+ "epoch 1597: loss = 1721231.839435, a = 909.744436, b = 152.544495\n",
+ "epoch 1598: loss = 1721225.688310, a = 909.821773, b = 152.544446\n",
+ "epoch 1599: loss = 1721219.561414, a = 909.898956, b = 152.544397\n",
+ "epoch 1600: loss = 1721213.458651, a = 909.975984, b = 152.544347\n",
+ "epoch 1601: loss = 1721207.379924, a = 910.052859, b = 152.544298\n",
+ "epoch 1602: loss = 1721201.325138, a = 910.129579, b = 152.544249\n",
+ "epoch 1603: loss = 1721195.294200, a = 910.206146, b = 152.544200\n",
+ "epoch 1604: loss = 1721189.287013, a = 910.282560, b = 152.544152\n",
+ "epoch 1605: loss = 1721183.303483, a = 910.358821, b = 152.544103\n",
+ "epoch 1606: loss = 1721177.343518, a = 910.434930, b = 152.544054\n",
+ "epoch 1607: loss = 1721171.407023, a = 910.510887, b = 152.544006\n",
+ "epoch 1608: loss = 1721165.493905, a = 910.586691, b = 152.543957\n",
+ "epoch 1609: loss = 1721159.604072, a = 910.662344, b = 152.543909\n",
+ "epoch 1610: loss = 1721153.737431, a = 910.737846, b = 152.543861\n",
+ "epoch 1611: loss = 1721147.893890, a = 910.813197, b = 152.543813\n",
+ "epoch 1612: loss = 1721142.073358, a = 910.888397, b = 152.543765\n",
+ "epoch 1613: loss = 1721136.275743, a = 910.963447, b = 152.543717\n",
+ "epoch 1614: loss = 1721130.500955, a = 911.038346, b = 152.543669\n",
+ "epoch 1615: loss = 1721124.748902, a = 911.113096, b = 152.543621\n",
+ "epoch 1616: loss = 1721119.019496, a = 911.187697, b = 152.543574\n",
+ "epoch 1617: loss = 1721113.312646, a = 911.262148, b = 152.543526\n",
+ "epoch 1618: loss = 1721107.628262, a = 911.336450, b = 152.543478\n",
+ "epoch 1619: loss = 1721101.966255, a = 911.410604, b = 152.543431\n",
+ "epoch 1620: loss = 1721096.326537, a = 911.484609, b = 152.543384\n",
+ "epoch 1621: loss = 1721090.709020, a = 911.558467, b = 152.543337\n",
+ "epoch 1622: loss = 1721085.113615, a = 911.632177, b = 152.543290\n",
+ "epoch 1623: loss = 1721079.540234, a = 911.705739, b = 152.543243\n",
+ "epoch 1624: loss = 1721073.988791, a = 911.779154, b = 152.543196\n",
+ "epoch 1625: loss = 1721068.459198, a = 911.852423, b = 152.543149\n",
+ "epoch 1626: loss = 1721062.951369, a = 911.925545, b = 152.543102\n",
+ "epoch 1627: loss = 1721057.465217, a = 911.998521, b = 152.543056\n",
+ "epoch 1628: loss = 1721052.000656, a = 912.071351, b = 152.543009\n",
+ "epoch 1629: loss = 1721046.557601, a = 912.144035, b = 152.542963\n",
+ "epoch 1630: loss = 1721041.135967, a = 912.216574, b = 152.542916\n",
+ "epoch 1631: loss = 1721035.735668, a = 912.288967, b = 152.542870\n",
+ "epoch 1632: loss = 1721030.356621, a = 912.361217, b = 152.542824\n",
+ "epoch 1633: loss = 1721024.998740, a = 912.433321, b = 152.542778\n",
+ "epoch 1634: loss = 1721019.661942, a = 912.505281, b = 152.542732\n",
+ "epoch 1635: loss = 1721014.346143, a = 912.577098, b = 152.542686\n",
+ "epoch 1636: loss = 1721009.051260, a = 912.648771, b = 152.542640\n",
+ "epoch 1637: loss = 1721003.777210, a = 912.720300, b = 152.542595\n",
+ "epoch 1638: loss = 1720998.523911, a = 912.791687, b = 152.542549\n",
+ "epoch 1639: loss = 1720993.291280, a = 912.862931, b = 152.542504\n",
+ "epoch 1640: loss = 1720988.079235, a = 912.934032, b = 152.542458\n",
+ "epoch 1641: loss = 1720982.887695, a = 913.004991, b = 152.542413\n",
+ "epoch 1642: loss = 1720977.716578, a = 913.075808, b = 152.542368\n",
+ "epoch 1643: loss = 1720972.565804, a = 913.146484, b = 152.542322\n",
+ "epoch 1644: loss = 1720967.435291, a = 913.217018, b = 152.542277\n",
+ "epoch 1645: loss = 1720962.324960, a = 913.287412, b = 152.542232\n",
+ "epoch 1646: loss = 1720957.234731, a = 913.357664, b = 152.542188\n",
+ "epoch 1647: loss = 1720952.164523, a = 913.427776, b = 152.542143\n",
+ "epoch 1648: loss = 1720947.114257, a = 913.497748, b = 152.542098\n",
+ "epoch 1649: loss = 1720942.083855, a = 913.567580, b = 152.542053\n",
+ "epoch 1650: loss = 1720937.073238, a = 913.637272, b = 152.542009\n",
+ "epoch 1651: loss = 1720932.082327, a = 913.706825, b = 152.541965\n",
+ "epoch 1652: loss = 1720927.111044, a = 913.776239, b = 152.541920\n",
+ "epoch 1653: loss = 1720922.159311, a = 913.845514, b = 152.541876\n",
+ "epoch 1654: loss = 1720917.227051, a = 913.914650, b = 152.541832\n",
+ "epoch 1655: loss = 1720912.314187, a = 913.983648, b = 152.541788\n",
+ "epoch 1656: loss = 1720907.420641, a = 914.052509, b = 152.541744\n",
+ "epoch 1657: loss = 1720902.546338, a = 914.121231, b = 152.541700\n",
+ "epoch 1658: loss = 1720897.691201, a = 914.189816, b = 152.541656\n",
+ "epoch 1659: loss = 1720892.855154, a = 914.258264, b = 152.541612\n",
+ "epoch 1660: loss = 1720888.038121, a = 914.326575, b = 152.541569\n",
+ "epoch 1661: loss = 1720883.240027, a = 914.394750, b = 152.541525\n",
+ "epoch 1662: loss = 1720878.460797, a = 914.462788, b = 152.541482\n",
+ "epoch 1663: loss = 1720873.700356, a = 914.530690, b = 152.541438\n",
+ "epoch 1664: loss = 1720868.958630, a = 914.598457, b = 152.541395\n",
+ "epoch 1665: loss = 1720864.235544, a = 914.666087, b = 152.541352\n",
+ "epoch 1666: loss = 1720859.531025, a = 914.733583, b = 152.541309\n",
+ "epoch 1667: loss = 1720854.845000, a = 914.800944, b = 152.541266\n",
+ "epoch 1668: loss = 1720850.177394, a = 914.868170, b = 152.541223\n",
+ "epoch 1669: loss = 1720845.528135, a = 914.935261, b = 152.541180\n",
+ "epoch 1670: loss = 1720840.897150, a = 915.002218, b = 152.541137\n",
+ "epoch 1671: loss = 1720836.284366, a = 915.069042, b = 152.541095\n",
+ "epoch 1672: loss = 1720831.689713, a = 915.135732, b = 152.541052\n",
+ "epoch 1673: loss = 1720827.113117, a = 915.202288, b = 152.541009\n",
+ "epoch 1674: loss = 1720822.554508, a = 915.268712, b = 152.540967\n",
+ "epoch 1675: loss = 1720818.013813, a = 915.335002, b = 152.540925\n",
+ "epoch 1676: loss = 1720813.490962, a = 915.401160, b = 152.540882\n",
+ "epoch 1677: loss = 1720808.985885, a = 915.467186, b = 152.540840\n",
+ "epoch 1678: loss = 1720804.498511, a = 915.533079, b = 152.540798\n",
+ "epoch 1679: loss = 1720800.028769, a = 915.598841, b = 152.540756\n",
+ "epoch 1680: loss = 1720795.576590, a = 915.664472, b = 152.540714\n",
+ "epoch 1681: loss = 1720791.141905, a = 915.729971, b = 152.540672\n",
+ "epoch 1682: loss = 1720786.724644, a = 915.795339, b = 152.540631\n",
+ "epoch 1683: loss = 1720782.324737, a = 915.860577, b = 152.540589\n",
+ "epoch 1684: loss = 1720777.942117, a = 915.925684, b = 152.540547\n",
+ "epoch 1685: loss = 1720773.576714, a = 915.990660, b = 152.540506\n",
+ "epoch 1686: loss = 1720769.228461, a = 916.055507, b = 152.540464\n",
+ "epoch 1687: loss = 1720764.897290, a = 916.120224, b = 152.540423\n",
+ "epoch 1688: loss = 1720760.583133, a = 916.184812, b = 152.540382\n",
+ "epoch 1689: loss = 1720756.285922, a = 916.249271, b = 152.540341\n",
+ "epoch 1690: loss = 1720752.005590, a = 916.313601, b = 152.540300\n",
+ "epoch 1691: loss = 1720747.742072, a = 916.377802, b = 152.540259\n",
+ "epoch 1692: loss = 1720743.495299, a = 916.441875, b = 152.540218\n",
+ "epoch 1693: loss = 1720739.265205, a = 916.505819, b = 152.540177\n",
+ "epoch 1694: loss = 1720735.051726, a = 916.569636, b = 152.540136\n",
+ "epoch 1695: loss = 1720730.854794, a = 916.633325, b = 152.540095\n",
+ "epoch 1696: loss = 1720726.674344, a = 916.696887, b = 152.540055\n",
+ "epoch 1697: loss = 1720722.510311, a = 916.760321, b = 152.540014\n",
+ "epoch 1698: loss = 1720718.362630, a = 916.823629, b = 152.539974\n",
+ "epoch 1699: loss = 1720714.231237, a = 916.886810, b = 152.539934\n",
+ "epoch 1700: loss = 1720710.116066, a = 916.949865, b = 152.539893\n",
+ "epoch 1701: loss = 1720706.017053, a = 917.012794, b = 152.539853\n",
+ "epoch 1702: loss = 1720701.934135, a = 917.075597, b = 152.539813\n",
+ "epoch 1703: loss = 1720697.867247, a = 917.138274, b = 152.539773\n",
+ "epoch 1704: loss = 1720693.816327, a = 917.200827, b = 152.539733\n",
+ "epoch 1705: loss = 1720689.781311, a = 917.263253, b = 152.539693\n",
+ "epoch 1706: loss = 1720685.762135, a = 917.325556, b = 152.539653\n",
+ "epoch 1707: loss = 1720681.758738, a = 917.387733, b = 152.539614\n",
+ "epoch 1708: loss = 1720677.771057, a = 917.449786, b = 152.539574\n",
+ "epoch 1709: loss = 1720673.799029, a = 917.511715, b = 152.539534\n",
+ "epoch 1710: loss = 1720669.842593, a = 917.573521, b = 152.539495\n",
+ "epoch 1711: loss = 1720665.901687, a = 917.635202, b = 152.539456\n",
+ "epoch 1712: loss = 1720661.976249, a = 917.696761, b = 152.539416\n",
+ "epoch 1713: loss = 1720658.066218, a = 917.758196, b = 152.539377\n",
+ "epoch 1714: loss = 1720654.171533, a = 917.819508, b = 152.539338\n",
+ "epoch 1715: loss = 1720650.292133, a = 917.880698, b = 152.539299\n",
+ "epoch 1716: loss = 1720646.427958, a = 917.941766, b = 152.539260\n",
+ "epoch 1717: loss = 1720642.578948, a = 918.002711, b = 152.539221\n",
+ "epoch 1718: loss = 1720638.745042, a = 918.063534, b = 152.539182\n",
+ "epoch 1719: loss = 1720634.926181, a = 918.124236, b = 152.539143\n",
+ "epoch 1720: loss = 1720631.122305, a = 918.184817, b = 152.539104\n",
+ "epoch 1721: loss = 1720627.333355, a = 918.245276, b = 152.539066\n",
+ "epoch 1722: loss = 1720623.559271, a = 918.305614, b = 152.539027\n",
+ "epoch 1723: loss = 1720619.799996, a = 918.365832, b = 152.538989\n",
+ "epoch 1724: loss = 1720616.055469, a = 918.425930, b = 152.538950\n",
+ "epoch 1725: loss = 1720612.325634, a = 918.485907, b = 152.538912\n",
+ "epoch 1726: loss = 1720608.610431, a = 918.545764, b = 152.538874\n",
+ "epoch 1727: loss = 1720604.909803, a = 918.605501, b = 152.538836\n",
+ "epoch 1728: loss = 1720601.223691, a = 918.665120, b = 152.538798\n",
+ "epoch 1729: loss = 1720597.552040, a = 918.724618, b = 152.538760\n",
+ "epoch 1730: loss = 1720593.894791, a = 918.783998, b = 152.538722\n",
+ "epoch 1731: loss = 1720590.251887, a = 918.843259, b = 152.538684\n",
+ "epoch 1732: loss = 1720586.623272, a = 918.902402, b = 152.538646\n",
+ "epoch 1733: loss = 1720583.008889, a = 918.961426, b = 152.538608\n",
+ "epoch 1734: loss = 1720579.408681, a = 919.020333, b = 152.538571\n",
+ "epoch 1735: loss = 1720575.822593, a = 919.079121, b = 152.538533\n",
+ "epoch 1736: loss = 1720572.250569, a = 919.137792, b = 152.538496\n",
+ "epoch 1737: loss = 1720568.692553, a = 919.196346, b = 152.538458\n",
+ "epoch 1738: loss = 1720565.148489, a = 919.254783, b = 152.538421\n",
+ "epoch 1739: loss = 1720561.618323, a = 919.313102, b = 152.538384\n",
+ "epoch 1740: loss = 1720558.101999, a = 919.371305, b = 152.538347\n",
+ "epoch 1741: loss = 1720554.599463, a = 919.429392, b = 152.538310\n",
+ "epoch 1742: loss = 1720551.110660, a = 919.487363, b = 152.538273\n",
+ "epoch 1743: loss = 1720547.635535, a = 919.545217, b = 152.538236\n",
+ "epoch 1744: loss = 1720544.174035, a = 919.602956, b = 152.538199\n",
+ "epoch 1745: loss = 1720540.726106, a = 919.660580, b = 152.538162\n",
+ "epoch 1746: loss = 1720537.291694, a = 919.718088, b = 152.538125\n",
+ "epoch 1747: loss = 1720533.870745, a = 919.775481, b = 152.538089\n",
+ "epoch 1748: loss = 1720530.463206, a = 919.832760, b = 152.538052\n",
+ "epoch 1749: loss = 1720527.069024, a = 919.889924, b = 152.538015\n",
+ "epoch 1750: loss = 1720523.688147, a = 919.946973, b = 152.537979\n",
+ "epoch 1751: loss = 1720520.320521, a = 920.003909, b = 152.537943\n",
+ "epoch 1752: loss = 1720516.966095, a = 920.060731, b = 152.537906\n",
+ "epoch 1753: loss = 1720513.624815, a = 920.117439, b = 152.537870\n",
+ "epoch 1754: loss = 1720510.296631, a = 920.174033, b = 152.537834\n",
+ "epoch 1755: loss = 1720506.981489, a = 920.230515, b = 152.537798\n",
+ "epoch 1756: loss = 1720503.679339, a = 920.286884, b = 152.537762\n",
+ "epoch 1757: loss = 1720500.390129, a = 920.343139, b = 152.537726\n",
+ "epoch 1758: loss = 1720497.113808, a = 920.399283, b = 152.537690\n",
+ "epoch 1759: loss = 1720493.850325, a = 920.455314, b = 152.537654\n",
+ "epoch 1760: loss = 1720490.599630, a = 920.511233, b = 152.537619\n",
+ "epoch 1761: loss = 1720487.361670, a = 920.567040, b = 152.537583\n",
+ "epoch 1762: loss = 1720484.136397, a = 920.622736, b = 152.537547\n",
+ "epoch 1763: loss = 1720480.923760, a = 920.678320, b = 152.537512\n",
+ "epoch 1764: loss = 1720477.723709, a = 920.733793, b = 152.537476\n",
+ "epoch 1765: loss = 1720474.536195, a = 920.789155, b = 152.537441\n",
+ "epoch 1766: loss = 1720471.361166, a = 920.844407, b = 152.537406\n",
+ "epoch 1767: loss = 1720468.198576, a = 920.899548, b = 152.537371\n",
+ "epoch 1768: loss = 1720465.048373, a = 920.954579, b = 152.537335\n",
+ "epoch 1769: loss = 1720461.910509, a = 921.009499, b = 152.537300\n",
+ "epoch 1770: loss = 1720458.784936, a = 921.064310, b = 152.537265\n",
+ "epoch 1771: loss = 1720455.671604, a = 921.119011, b = 152.537230\n",
+ "epoch 1772: loss = 1720452.570465, a = 921.173603, b = 152.537196\n",
+ "epoch 1773: loss = 1720449.481472, a = 921.228086, b = 152.537161\n",
+ "epoch 1774: loss = 1720446.404575, a = 921.282460, b = 152.537126\n",
+ "epoch 1775: loss = 1720443.339727, a = 921.336725, b = 152.537091\n",
+ "epoch 1776: loss = 1720440.286881, a = 921.390881, b = 152.537057\n",
+ "epoch 1777: loss = 1720437.245989, a = 921.444930, b = 152.537022\n",
+ "epoch 1778: loss = 1720434.217004, a = 921.498870, b = 152.536988\n",
+ "epoch 1779: loss = 1720431.199878, a = 921.552702, b = 152.536953\n",
+ "epoch 1780: loss = 1720428.194566, a = 921.606427, b = 152.536919\n",
+ "epoch 1781: loss = 1720425.201019, a = 921.660044, b = 152.536885\n",
+ "epoch 1782: loss = 1720422.219191, a = 921.713554, b = 152.536851\n",
+ "epoch 1783: loss = 1720419.249037, a = 921.766957, b = 152.536817\n",
+ "epoch 1784: loss = 1720416.290510, a = 921.820253, b = 152.536783\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "epoch 1785: loss = 1720413.343564, a = 921.873443, b = 152.536749\n",
+ "epoch 1786: loss = 1720410.408153, a = 921.926526, b = 152.536715\n",
+ "epoch 1787: loss = 1720407.484232, a = 921.979503, b = 152.536681\n",
+ "epoch 1788: loss = 1720404.571755, a = 922.032374, b = 152.536647\n",
+ "epoch 1789: loss = 1720401.670677, a = 922.085140, b = 152.536613\n",
+ "epoch 1790: loss = 1720398.780953, a = 922.137800, b = 152.536580\n",
+ "epoch 1791: loss = 1720395.902538, a = 922.190354, b = 152.536546\n",
+ "epoch 1792: loss = 1720393.035387, a = 922.242804, b = 152.536513\n",
+ "epoch 1793: loss = 1720390.179456, a = 922.295149, b = 152.536479\n",
+ "epoch 1794: loss = 1720387.334700, a = 922.347389, b = 152.536446\n",
+ "epoch 1795: loss = 1720384.501075, a = 922.399524, b = 152.536413\n",
+ "epoch 1796: loss = 1720381.678538, a = 922.451555, b = 152.536379\n",
+ "epoch 1797: loss = 1720378.867044, a = 922.503483, b = 152.536346\n",
+ "epoch 1798: loss = 1720376.066550, a = 922.555306, b = 152.536313\n",
+ "epoch 1799: loss = 1720373.277012, a = 922.607026, b = 152.536280\n",
+ "epoch 1800: loss = 1720370.498388, a = 922.658642, b = 152.536247\n",
+ "epoch 1801: loss = 1720367.730632, a = 922.710155, b = 152.536214\n",
+ "epoch 1802: loss = 1720364.973704, a = 922.761565, b = 152.536181\n",
+ "epoch 1803: loss = 1720362.227560, a = 922.812873, b = 152.536149\n",
+ "epoch 1804: loss = 1720359.492157, a = 922.864078, b = 152.536116\n",
+ "epoch 1805: loss = 1720356.767453, a = 922.915180, b = 152.536083\n",
+ "epoch 1806: loss = 1720354.053406, a = 922.966180, b = 152.536051\n",
+ "epoch 1807: loss = 1720351.349974, a = 923.017078, b = 152.536018\n",
+ "epoch 1808: loss = 1720348.657114, a = 923.067875, b = 152.535986\n",
+ "epoch 1809: loss = 1720345.974785, a = 923.118569, b = 152.535953\n",
+ "epoch 1810: loss = 1720343.302945, a = 923.169163, b = 152.535921\n",
+ "epoch 1811: loss = 1720340.641553, a = 923.219655, b = 152.535889\n",
+ "epoch 1812: loss = 1720337.990567, a = 923.270046, b = 152.535857\n",
+ "epoch 1813: loss = 1720335.349947, a = 923.320337, b = 152.535824\n",
+ "epoch 1814: loss = 1720332.719651, a = 923.370527, b = 152.535792\n",
+ "epoch 1815: loss = 1720330.099638, a = 923.420616, b = 152.535760\n",
+ "epoch 1816: loss = 1720327.489869, a = 923.470606, b = 152.535728\n",
+ "epoch 1817: loss = 1720324.890302, a = 923.520495, b = 152.535697\n",
+ "epoch 1818: loss = 1720322.300897, a = 923.570285, b = 152.535665\n",
+ "epoch 1819: loss = 1720319.721615, a = 923.619975, b = 152.535633\n",
+ "epoch 1820: loss = 1720317.152414, a = 923.669566, b = 152.535601\n",
+ "epoch 1821: loss = 1720314.593256, a = 923.719058, b = 152.535570\n",
+ "epoch 1822: loss = 1720312.044100, a = 923.768450, b = 152.535538\n",
+ "epoch 1823: loss = 1720309.504906, a = 923.817744, b = 152.535507\n",
+ "epoch 1824: loss = 1720306.975637, a = 923.866939, b = 152.535475\n",
+ "epoch 1825: loss = 1720304.456252, a = 923.916036, b = 152.535444\n",
+ "epoch 1826: loss = 1720301.946713, a = 923.965035, b = 152.535413\n",
+ "epoch 1827: loss = 1720299.446979, a = 924.013936, b = 152.535381\n",
+ "epoch 1828: loss = 1720296.957014, a = 924.062739, b = 152.535350\n",
+ "epoch 1829: loss = 1720294.476778, a = 924.111444, b = 152.535319\n",
+ "epoch 1830: loss = 1720292.006232, a = 924.160052, b = 152.535288\n",
+ "epoch 1831: loss = 1720289.545339, a = 924.208563, b = 152.535257\n",
+ "epoch 1832: loss = 1720287.094060, a = 924.256977, b = 152.535226\n",
+ "epoch 1833: loss = 1720284.652358, a = 924.305294, b = 152.535195\n",
+ "epoch 1834: loss = 1720282.220194, a = 924.353514, b = 152.535165\n",
+ "epoch 1835: loss = 1720279.797531, a = 924.401638, b = 152.535134\n",
+ "epoch 1836: loss = 1720277.384331, a = 924.449666, b = 152.535103\n",
+ "epoch 1837: loss = 1720274.980557, a = 924.497598, b = 152.535073\n",
+ "epoch 1838: loss = 1720272.586172, a = 924.545433, b = 152.535042\n",
+ "epoch 1839: loss = 1720270.201138, a = 924.593174, b = 152.535011\n",
+ "epoch 1840: loss = 1720267.825419, a = 924.640818, b = 152.534981\n",
+ "epoch 1841: loss = 1720265.458978, a = 924.688368, b = 152.534951\n",
+ "epoch 1842: loss = 1720263.101779, a = 924.735822, b = 152.534920\n",
+ "epoch 1843: loss = 1720260.753784, a = 924.783182, b = 152.534890\n",
+ "epoch 1844: loss = 1720258.414957, a = 924.830446, b = 152.534860\n",
+ "epoch 1845: loss = 1720256.085263, a = 924.877617, b = 152.534830\n",
+ "epoch 1846: loss = 1720253.764664, a = 924.924692, b = 152.534800\n",
+ "epoch 1847: loss = 1720251.453126, a = 924.971674, b = 152.534770\n",
+ "epoch 1848: loss = 1720249.150613, a = 925.018562, b = 152.534740\n",
+ "epoch 1849: loss = 1720246.857088, a = 925.065356, b = 152.534710\n",
+ "epoch 1850: loss = 1720244.572517, a = 925.112057, b = 152.534680\n",
+ "epoch 1851: loss = 1720242.296863, a = 925.158664, b = 152.534650\n",
+ "epoch 1852: loss = 1720240.030093, a = 925.205178, b = 152.534621\n",
+ "epoch 1853: loss = 1720237.772169, a = 925.251599, b = 152.534591\n",
+ "epoch 1854: loss = 1720235.523059, a = 925.297927, b = 152.534561\n",
+ "epoch 1855: loss = 1720233.282727, a = 925.344162, b = 152.534532\n",
+ "epoch 1856: loss = 1720231.051138, a = 925.390305, b = 152.534502\n",
+ "epoch 1857: loss = 1720228.828258, a = 925.436356, b = 152.534473\n",
+ "epoch 1858: loss = 1720226.614052, a = 925.482314, b = 152.534444\n",
+ "epoch 1859: loss = 1720224.408486, a = 925.528181, b = 152.534414\n",
+ "epoch 1860: loss = 1720222.211527, a = 925.573956, b = 152.534385\n",
+ "epoch 1861: loss = 1720220.023139, a = 925.619640, b = 152.534356\n",
+ "epoch 1862: loss = 1720217.843290, a = 925.665232, b = 152.534327\n",
+ "epoch 1863: loss = 1720215.671945, a = 925.710733, b = 152.534298\n",
+ "epoch 1864: loss = 1720213.509072, a = 925.756143, b = 152.534269\n",
+ "epoch 1865: loss = 1720211.354635, a = 925.801462, b = 152.534240\n",
+ "epoch 1866: loss = 1720209.208604, a = 925.846690, b = 152.534211\n",
+ "epoch 1867: loss = 1720207.070943, a = 925.891828, b = 152.534182\n",
+ "epoch 1868: loss = 1720204.941620, a = 925.936876, b = 152.534153\n",
+ "epoch 1869: loss = 1720202.820602, a = 925.981834, b = 152.534125\n",
+ "epoch 1870: loss = 1720200.707857, a = 926.026702, b = 152.534096\n",
+ "epoch 1871: loss = 1720198.603351, a = 926.071480, b = 152.534067\n",
+ "epoch 1872: loss = 1720196.507053, a = 926.116169, b = 152.534039\n",
+ "epoch 1873: loss = 1720194.418929, a = 926.160768, b = 152.534010\n",
+ "epoch 1874: loss = 1720192.338948, a = 926.205278, b = 152.533982\n",
+ "epoch 1875: loss = 1720190.267077, a = 926.249699, b = 152.533953\n",
+ "epoch 1876: loss = 1720188.203284, a = 926.294031, b = 152.533925\n",
+ "epoch 1877: loss = 1720186.147538, a = 926.338275, b = 152.533897\n",
+ "epoch 1878: loss = 1720184.099807, a = 926.382430, b = 152.533869\n",
+ "epoch 1879: loss = 1720182.060059, a = 926.426497, b = 152.533841\n",
+ "epoch 1880: loss = 1720180.028263, a = 926.470475, b = 152.533812\n",
+ "epoch 1881: loss = 1720178.004387, a = 926.514366, b = 152.533784\n",
+ "epoch 1882: loss = 1720175.988400, a = 926.558169, b = 152.533756\n",
+ "epoch 1883: loss = 1720173.980271, a = 926.601884, b = 152.533729\n",
+ "epoch 1884: loss = 1720171.979968, a = 926.645512, b = 152.533701\n",
+ "epoch 1885: loss = 1720169.987462, a = 926.689053, b = 152.533673\n",
+ "epoch 1886: loss = 1720168.002721, a = 926.732507, b = 152.533645\n",
+ "epoch 1887: loss = 1720166.025715, a = 926.775873, b = 152.533617\n",
+ "epoch 1888: loss = 1720164.056412, a = 926.819153, b = 152.533590\n",
+ "epoch 1889: loss = 1720162.094784, a = 926.862347, b = 152.533562\n",
+ "epoch 1890: loss = 1720160.140799, a = 926.905454, b = 152.533535\n",
+ "epoch 1891: loss = 1720158.194427, a = 926.948475, b = 152.533507\n",
+ "epoch 1892: loss = 1720156.255638, a = 926.991410, b = 152.533480\n",
+ "epoch 1893: loss = 1720154.324403, a = 927.034259, b = 152.533452\n",
+ "epoch 1894: loss = 1720152.400692, a = 927.077022, b = 152.533425\n",
+ "epoch 1895: loss = 1720150.484474, a = 927.119700, b = 152.533398\n",
+ "epoch 1896: loss = 1720148.575721, a = 927.162292, b = 152.533371\n",
+ "epoch 1897: loss = 1720146.674402, a = 927.204800, b = 152.533343\n",
+ "epoch 1898: loss = 1720144.780489, a = 927.247222, b = 152.533316\n",
+ "epoch 1899: loss = 1720142.893953, a = 927.289560, b = 152.533289\n",
+ "epoch 1900: loss = 1720141.014763, a = 927.331812, b = 152.533262\n",
+ "epoch 1901: loss = 1720139.142892, a = 927.373981, b = 152.533235\n",
+ "epoch 1902: loss = 1720137.278311, a = 927.416065, b = 152.533209\n",
+ "epoch 1903: loss = 1720135.420990, a = 927.458065, b = 152.533182\n",
+ "epoch 1904: loss = 1720133.570901, a = 927.499981, b = 152.533155\n",
+ "epoch 1905: loss = 1720131.728016, a = 927.541813, b = 152.533128\n",
+ "epoch 1906: loss = 1720129.892306, a = 927.583561, b = 152.533102\n",
+ "epoch 1907: loss = 1720128.063742, a = 927.625226, b = 152.533075\n",
+ "epoch 1908: loss = 1720126.242298, a = 927.666808, b = 152.533048\n",
+ "epoch 1909: loss = 1720124.427944, a = 927.708306, b = 152.533022\n",
+ "epoch 1910: loss = 1720122.620652, a = 927.749721, b = 152.532995\n",
+ "epoch 1911: loss = 1720120.820396, a = 927.791054, b = 152.532969\n",
+ "epoch 1912: loss = 1720119.027146, a = 927.832304, b = 152.532943\n",
+ "epoch 1913: loss = 1720117.240876, a = 927.873472, b = 152.532916\n",
+ "epoch 1914: loss = 1720115.461558, a = 927.914557, b = 152.532890\n",
+ "epoch 1915: loss = 1720113.689165, a = 927.955560, b = 152.532864\n",
+ "epoch 1916: loss = 1720111.923668, a = 927.996481, b = 152.532838\n",
+ "epoch 1917: loss = 1720110.165042, a = 928.037320, b = 152.532812\n",
+ "epoch 1918: loss = 1720108.413258, a = 928.078078, b = 152.532786\n",
+ "epoch 1919: loss = 1720106.668291, a = 928.118754, b = 152.532760\n",
+ "epoch 1920: loss = 1720104.930113, a = 928.159348, b = 152.532734\n",
+ "epoch 1921: loss = 1720103.198697, a = 928.199862, b = 152.532708\n",
+ "epoch 1922: loss = 1720101.474017, a = 928.240295, b = 152.532682\n",
+ "epoch 1923: loss = 1720099.756046, a = 928.280646, b = 152.532656\n",
+ "epoch 1924: loss = 1720098.044757, a = 928.320917, b = 152.532631\n",
+ "epoch 1925: loss = 1720096.340125, a = 928.361108, b = 152.532605\n",
+ "epoch 1926: loss = 1720094.642123, a = 928.401218, b = 152.532579\n",
+ "epoch 1927: loss = 1720092.950726, a = 928.441248, b = 152.532554\n",
+ "epoch 1928: loss = 1720091.265906, a = 928.481197, b = 152.532528\n",
+ "epoch 1929: loss = 1720089.587638, a = 928.521067, b = 152.532503\n",
+ "epoch 1930: loss = 1720087.915897, a = 928.560858, b = 152.532477\n",
+ "epoch 1931: loss = 1720086.250656, a = 928.600568, b = 152.532452\n",
+ "epoch 1932: loss = 1720084.591889, a = 928.640200, b = 152.532427\n",
+ "epoch 1933: loss = 1720082.939573, a = 928.679752, b = 152.532401\n",
+ "epoch 1934: loss = 1720081.293680, a = 928.719224, b = 152.532376\n",
+ "epoch 1935: loss = 1720079.654186, a = 928.758618, b = 152.532351\n",
+ "epoch 1936: loss = 1720078.021066, a = 928.797934, b = 152.532326\n",
+ "epoch 1937: loss = 1720076.394293, a = 928.837170, b = 152.532301\n",
+ "epoch 1938: loss = 1720074.773845, a = 928.876328, b = 152.532276\n",
+ "epoch 1939: loss = 1720073.159694, a = 928.915408, b = 152.532251\n",
+ "epoch 1940: loss = 1720071.551818, a = 928.954410, b = 152.532226\n",
+ "epoch 1941: loss = 1720069.950190, a = 928.993333, b = 152.532201\n",
+ "epoch 1942: loss = 1720068.354786, a = 929.032179, b = 152.532176\n",
+ "epoch 1943: loss = 1720066.765582, a = 929.070948, b = 152.532152\n",
+ "epoch 1944: loss = 1720065.182554, a = 929.109638, b = 152.532127\n",
+ "epoch 1945: loss = 1720063.605677, a = 929.148251, b = 152.532102\n",
+ "epoch 1946: loss = 1720062.034926, a = 929.186787, b = 152.532078\n",
+ "epoch 1947: loss = 1720060.470278, a = 929.225246, b = 152.532053\n",
+ "epoch 1948: loss = 1720058.911709, a = 929.263629, b = 152.532028\n",
+ "epoch 1949: loss = 1720057.359194, a = 929.301934, b = 152.532004\n",
+ "epoch 1950: loss = 1720055.812710, a = 929.340163, b = 152.531980\n",
+ "epoch 1951: loss = 1720054.272234, a = 929.378315, b = 152.531955\n",
+ "epoch 1952: loss = 1720052.737740, a = 929.416391, b = 152.531931\n",
+ "epoch 1953: loss = 1720051.209207, a = 929.454391, b = 152.531907\n",
+ "epoch 1954: loss = 1720049.686610, a = 929.492315, b = 152.531882\n",
+ "epoch 1955: loss = 1720048.169926, a = 929.530163, b = 152.531858\n",
+ "epoch 1956: loss = 1720046.659132, a = 929.567935, b = 152.531834\n",
+ "epoch 1957: loss = 1720045.154204, a = 929.605632, b = 152.531810\n",
+ "epoch 1958: loss = 1720043.655120, a = 929.643253, b = 152.531786\n",
+ "epoch 1959: loss = 1720042.161857, a = 929.680800, b = 152.531762\n",
+ "epoch 1960: loss = 1720040.674390, a = 929.718271, b = 152.531738\n",
+ "epoch 1961: loss = 1720039.192699, a = 929.755667, b = 152.531714\n",
+ "epoch 1962: loss = 1720037.716759, a = 929.792988, b = 152.531690\n",
+ "epoch 1963: loss = 1720036.246549, a = 929.830235, b = 152.531667\n",
+ "epoch 1964: loss = 1720034.782046, a = 929.867408, b = 152.531643\n",
+ "epoch 1965: loss = 1720033.323226, a = 929.904506, b = 152.531619\n",
+ "epoch 1966: loss = 1720031.870069, a = 929.941529, b = 152.531596\n",
+ "epoch 1967: loss = 1720030.422552, a = 929.978479, b = 152.531572\n",
+ "epoch 1968: loss = 1720028.980651, a = 930.015355, b = 152.531548\n",
+ "epoch 1969: loss = 1720027.544347, a = 930.052157, b = 152.531525\n",
+ "epoch 1970: loss = 1720026.113615, a = 930.088886, b = 152.531501\n",
+ "epoch 1971: loss = 1720024.688435, a = 930.125541, b = 152.531478\n",
+ "epoch 1972: loss = 1720023.268784, a = 930.162123, b = 152.531455\n",
+ "epoch 1973: loss = 1720021.854641, a = 930.198631, b = 152.531431\n",
+ "epoch 1974: loss = 1720020.445984, a = 930.235067, b = 152.531408\n",
+ "epoch 1975: loss = 1720019.042792, a = 930.271430, b = 152.531385\n",
+ "epoch 1976: loss = 1720017.645042, a = 930.307720, b = 152.531362\n",
+ "epoch 1977: loss = 1720016.252715, a = 930.343937, b = 152.531338\n",
+ "epoch 1978: loss = 1720014.865787, a = 930.380082, b = 152.531315\n",
+ "epoch 1979: loss = 1720013.484238, a = 930.416155, b = 152.531292\n",
+ "epoch 1980: loss = 1720012.108047, a = 930.452156, b = 152.531269\n",
+ "epoch 1981: loss = 1720010.737193, a = 930.488085, b = 152.531246\n",
+ "epoch 1982: loss = 1720009.371655, a = 930.523941, b = 152.531224\n",
+ "epoch 1983: loss = 1720008.011411, a = 930.559727, b = 152.531201\n",
+ "epoch 1984: loss = 1720006.656442, a = 930.595440, b = 152.531178\n",
+ "epoch 1985: loss = 1720005.306725, a = 930.631082, b = 152.531155\n",
+ "epoch 1986: loss = 1720003.962241, a = 930.666653, b = 152.531132\n",
+ "epoch 1987: loss = 1720002.622969, a = 930.702153, b = 152.531110\n",
+ "epoch 1988: loss = 1720001.288889, a = 930.737582, b = 152.531087\n",
+ "epoch 1989: loss = 1719999.959979, a = 930.772940, b = 152.531064\n",
+ "epoch 1990: loss = 1719998.636221, a = 930.808227, b = 152.531042\n",
+ "epoch 1991: loss = 1719997.317593, a = 930.843444, b = 152.531019\n",
+ "epoch 1992: loss = 1719996.004075, a = 930.878590, b = 152.530997\n",
+ "epoch 1993: loss = 1719994.695647, a = 930.913666, b = 152.530975\n",
+ "epoch 1994: loss = 1719993.392289, a = 930.948672, b = 152.530952\n",
+ "epoch 1995: loss = 1719992.093981, a = 930.983607, b = 152.530930\n",
+ "epoch 1996: loss = 1719990.800704, a = 931.018473, b = 152.530908\n",
+ "epoch 1997: loss = 1719989.512438, a = 931.053270, b = 152.530885\n",
+ "epoch 1998: loss = 1719988.229162, a = 931.087996, b = 152.530863\n",
+ "epoch 1999: loss = 1719986.950857, a = 931.122653, b = 152.530841\n",
+ "epoch 2000: loss = 1719985.677504, a = 931.157241, b = 152.530819\n",
+ "epoch 2001: loss = 1719984.409083, a = 931.191760, b = 152.530797\n",
+ "epoch 2002: loss = 1719983.145576, a = 931.226210, b = 152.530775\n",
+ "epoch 2003: loss = 1719981.886961, a = 931.260591, b = 152.530753\n",
+ "epoch 2004: loss = 1719980.633221, a = 931.294903, b = 152.530731\n",
+ "epoch 2005: loss = 1719979.384336, a = 931.329146, b = 152.530709\n",
+ "epoch 2006: loss = 1719978.140286, a = 931.363321, b = 152.530687\n",
+ "epoch 2007: loss = 1719976.901054, a = 931.397428, b = 152.530666\n",
+ "epoch 2008: loss = 1719975.666620, a = 931.431466, b = 152.530644\n",
+ "epoch 2009: loss = 1719974.436965, a = 931.465437, b = 152.530622\n",
+ "epoch 2010: loss = 1719973.212070, a = 931.499339, b = 152.530601\n",
+ "epoch 2011: loss = 1719971.991917, a = 931.533174, b = 152.530579\n",
+ "epoch 2012: loss = 1719970.776487, a = 931.566941, b = 152.530557\n",
+ "epoch 2013: loss = 1719969.565762, a = 931.600640, b = 152.530536\n",
+ "epoch 2014: loss = 1719968.359722, a = 931.634272, b = 152.530514\n",
+ "epoch 2015: loss = 1719967.158350, a = 931.667837, b = 152.530493\n",
+ "epoch 2016: loss = 1719965.961627, a = 931.701335, b = 152.530472\n",
+ "epoch 2017: loss = 1719964.769535, a = 931.734766, b = 152.530450\n",
+ "epoch 2018: loss = 1719963.582056, a = 931.768130, b = 152.530429\n",
+ "epoch 2019: loss = 1719962.399172, a = 931.801427, b = 152.530408\n",
+ "epoch 2020: loss = 1719961.220864, a = 931.834657, b = 152.530386\n",
+ "epoch 2021: loss = 1719960.047114, a = 931.867821, b = 152.530365\n",
+ "epoch 2022: loss = 1719958.877905, a = 931.900919, b = 152.530344\n",
+ "epoch 2023: loss = 1719957.713219, a = 931.933951, b = 152.530323\n",
+ "epoch 2024: loss = 1719956.553038, a = 931.966917, b = 152.530302\n",
+ "epoch 2025: loss = 1719955.397344, a = 931.999816, b = 152.530281\n",
+ "epoch 2026: loss = 1719954.246120, a = 932.032650, b = 152.530260\n",
+ "epoch 2027: loss = 1719953.099348, a = 932.065418, b = 152.530239\n",
+ "epoch 2028: loss = 1719951.957011, a = 932.098121, b = 152.530218\n",
+ "epoch 2029: loss = 1719950.819091, a = 932.130758, b = 152.530197\n",
+ "epoch 2030: loss = 1719949.685570, a = 932.163330, b = 152.530176\n",
+ "epoch 2031: loss = 1719948.556433, a = 932.195837, b = 152.530156\n",
+ "epoch 2032: loss = 1719947.431660, a = 932.228279, b = 152.530135\n",
+ "epoch 2033: loss = 1719946.311236, a = 932.260656, b = 152.530114\n",
+ "epoch 2034: loss = 1719945.195143, a = 932.292968, b = 152.530094\n",
+ "epoch 2035: loss = 1719944.083364, a = 932.325216, b = 152.530073\n",
+ "epoch 2036: loss = 1719942.975882, a = 932.357399, b = 152.530052\n",
+ "epoch 2037: loss = 1719941.872681, a = 932.389518, b = 152.530032\n",
+ "epoch 2038: loss = 1719940.773742, a = 932.421573, b = 152.530012\n",
+ "epoch 2039: loss = 1719939.679051, a = 932.453563, b = 152.529991\n",
+ "epoch 2040: loss = 1719938.588590, a = 932.485490, b = 152.529971\n",
+ "epoch 2041: loss = 1719937.502342, a = 932.517352, b = 152.529950\n",
+ "epoch 2042: loss = 1719936.420291, a = 932.549151, b = 152.529930\n",
+ "epoch 2043: loss = 1719935.342420, a = 932.580887, b = 152.529910\n",
+ "epoch 2044: loss = 1719934.268714, a = 932.612559, b = 152.529890\n",
+ "epoch 2045: loss = 1719933.199154, a = 932.644167, b = 152.529869\n",
+ "epoch 2046: loss = 1719932.133727, a = 932.675713, b = 152.529849\n",
+ "epoch 2047: loss = 1719931.072414, a = 932.707195, b = 152.529829\n",
+ "epoch 2048: loss = 1719930.015201, a = 932.738614, b = 152.529809\n",
+ "epoch 2049: loss = 1719928.962070, a = 932.769971, b = 152.529789\n",
+ "epoch 2050: loss = 1719927.913006, a = 932.801265, b = 152.529769\n",
+ "epoch 2051: loss = 1719926.867993, a = 932.832496, b = 152.529749\n",
+ "epoch 2052: loss = 1719925.827015, a = 932.863665, b = 152.529729\n",
+ "epoch 2053: loss = 1719924.790056, a = 932.894771, b = 152.529709\n",
+ "epoch 2054: loss = 1719923.757100, a = 932.925815, b = 152.529689\n",
+ "epoch 2055: loss = 1719922.728132, a = 932.956798, b = 152.529670\n",
+ "epoch 2056: loss = 1719921.703136, a = 932.987718, b = 152.529650\n",
+ "epoch 2057: loss = 1719920.682097, a = 933.018576, b = 152.529630\n",
+ "epoch 2058: loss = 1719919.664998, a = 933.049373, b = 152.529611\n",
+ "epoch 2059: loss = 1719918.651824, a = 933.080108, b = 152.529591\n",
+ "epoch 2060: loss = 1719917.642561, a = 933.110782, b = 152.529571\n",
+ "epoch 2061: loss = 1719916.637192, a = 933.141394, b = 152.529552\n",
+ "epoch 2062: loss = 1719915.635703, a = 933.171945, b = 152.529532\n",
+ "epoch 2063: loss = 1719914.638078, a = 933.202435, b = 152.529513\n",
+ "epoch 2064: loss = 1719913.644301, a = 933.232864, b = 152.529493\n",
+ "epoch 2065: loss = 1719912.654359, a = 933.263232, b = 152.529474\n",
+ "epoch 2066: loss = 1719911.668235, a = 933.293540, b = 152.529455\n",
+ "epoch 2067: loss = 1719910.685915, a = 933.323787, b = 152.529435\n",
+ "epoch 2068: loss = 1719909.707384, a = 933.353973, b = 152.529416\n",
+ "epoch 2069: loss = 1719908.732628, a = 933.384099, b = 152.529397\n",
+ "epoch 2070: loss = 1719907.761630, a = 933.414165, b = 152.529378\n",
+ "epoch 2071: loss = 1719906.794377, a = 933.444170, b = 152.529358\n",
+ "epoch 2072: loss = 1719905.830853, a = 933.474116, b = 152.529339\n",
+ "epoch 2073: loss = 1719904.871045, a = 933.504002, b = 152.529320\n",
+ "epoch 2074: loss = 1719903.914938, a = 933.533828, b = 152.529301\n",
+ "epoch 2075: loss = 1719902.962516, a = 933.563594, b = 152.529282\n",
+ "epoch 2076: loss = 1719902.013766, a = 933.593301, b = 152.529263\n",
+ "epoch 2077: loss = 1719901.068673, a = 933.622949, b = 152.529244\n",
+ "epoch 2078: loss = 1719900.127223, a = 933.652537, b = 152.529225\n",
+ "epoch 2079: loss = 1719899.189402, a = 933.682066, b = 152.529206\n",
+ "epoch 2080: loss = 1719898.255195, a = 933.711536, b = 152.529188\n",
+ "epoch 2081: loss = 1719897.324588, a = 933.740947, b = 152.529169\n",
+ "epoch 2082: loss = 1719896.397567, a = 933.770299, b = 152.529150\n",
+ "epoch 2083: loss = 1719895.474119, a = 933.799592, b = 152.529131\n",
+ "epoch 2084: loss = 1719894.554228, a = 933.828827, b = 152.529113\n",
+ "epoch 2085: loss = 1719893.637881, a = 933.858004, b = 152.529094\n",
+ "epoch 2086: loss = 1719892.725064, a = 933.887122, b = 152.529075\n",
+ "epoch 2087: loss = 1719891.815764, a = 933.916182, b = 152.529057\n",
+ "epoch 2088: loss = 1719890.909966, a = 933.945183, b = 152.529038\n",
+ "epoch 2089: loss = 1719890.007657, a = 933.974127, b = 152.529020\n",
+ "epoch 2090: loss = 1719889.108823, a = 934.003013, b = 152.529001\n",
+ "epoch 2091: loss = 1719888.213450, a = 934.031841, b = 152.528983\n",
+ "epoch 2092: loss = 1719887.321526, a = 934.060612, b = 152.528965\n",
+ "epoch 2093: loss = 1719886.433035, a = 934.089325, b = 152.528946\n",
+ "epoch 2094: loss = 1719885.547966, a = 934.117980, b = 152.528928\n",
+ "epoch 2095: loss = 1719884.666304, a = 934.146579, b = 152.528910\n",
+ "epoch 2096: loss = 1719883.788036, a = 934.175120, b = 152.528892\n",
+ "epoch 2097: loss = 1719882.913149, a = 934.203604, b = 152.528873\n",
+ "epoch 2098: loss = 1719882.041630, a = 934.232031, b = 152.528855\n",
+ "epoch 2099: loss = 1719881.173465, a = 934.260401, b = 152.528837\n",
+ "epoch 2100: loss = 1719880.308641, a = 934.288714, b = 152.528819\n",
+ "epoch 2101: loss = 1719879.447146, a = 934.316971, b = 152.528801\n",
+ "epoch 2102: loss = 1719878.588965, a = 934.345171, b = 152.528783\n",
+ "epoch 2103: loss = 1719877.734087, a = 934.373315, b = 152.528765\n",
+ "epoch 2104: loss = 1719876.882498, a = 934.401403, b = 152.528747\n",
+ "epoch 2105: loss = 1719876.034185, a = 934.429435, b = 152.528729\n",
+ "epoch 2106: loss = 1719875.189135, a = 934.457410, b = 152.528711\n",
+ "epoch 2107: loss = 1719874.347336, a = 934.485329, b = 152.528693\n",
+ "epoch 2108: loss = 1719873.508776, a = 934.513193, b = 152.528676\n",
+ "epoch 2109: loss = 1719872.673440, a = 934.541001, b = 152.528658\n",
+ "epoch 2110: loss = 1719871.841317, a = 934.568753, b = 152.528640\n",
+ "epoch 2111: loss = 1719871.012394, a = 934.596450, b = 152.528622\n",
+ "epoch 2112: loss = 1719870.186658, a = 934.624092, b = 152.528605\n",
+ "epoch 2113: loss = 1719869.364098, a = 934.651678, b = 152.528587\n",
+ "epoch 2114: loss = 1719868.544700, a = 934.679209, b = 152.528570\n",
+ "epoch 2115: loss = 1719867.728452, a = 934.706685, b = 152.528552\n",
+ "epoch 2116: loss = 1719866.915342, a = 934.734106, b = 152.528535\n",
+ "epoch 2117: loss = 1719866.105358, a = 934.761472, b = 152.528517\n",
+ "epoch 2118: loss = 1719865.298486, a = 934.788784, b = 152.528500\n",
+ "epoch 2119: loss = 1719864.494716, a = 934.816041, b = 152.528482\n",
+ "epoch 2120: loss = 1719863.694035, a = 934.843243, b = 152.528465\n",
+ "epoch 2121: loss = 1719862.896431, a = 934.870391, b = 152.528447\n",
+ "epoch 2122: loss = 1719862.101892, a = 934.897485, b = 152.528430\n",
+ "epoch 2123: loss = 1719861.310405, a = 934.924524, b = 152.528413\n",
+ "epoch 2124: loss = 1719860.521959, a = 934.951509, b = 152.528396\n",
+ "epoch 2125: loss = 1719859.736543, a = 934.978441, b = 152.528378\n",
+ "epoch 2126: loss = 1719858.954143, a = 935.005319, b = 152.528361\n",
+ "epoch 2127: loss = 1719858.174749, a = 935.032142, b = 152.528344\n",
+ "epoch 2128: loss = 1719857.398348, a = 935.058913, b = 152.528327\n",
+ "epoch 2129: loss = 1719856.624929, a = 935.085629, b = 152.528310\n",
+ "epoch 2130: loss = 1719855.854480, a = 935.112293, b = 152.528293\n",
+ "epoch 2131: loss = 1719855.086989, a = 935.138903, b = 152.528276\n",
+ "epoch 2132: loss = 1719854.322446, a = 935.165459, b = 152.528259\n",
+ "epoch 2133: loss = 1719853.560837, a = 935.191963, b = 152.528242\n",
+ "epoch 2134: loss = 1719852.802153, a = 935.218414, b = 152.528225\n",
+ "epoch 2135: loss = 1719852.046381, a = 935.244811, b = 152.528208\n",
+ "epoch 2136: loss = 1719851.293510, a = 935.271156, b = 152.528191\n",
+ "epoch 2137: loss = 1719850.543529, a = 935.297449, b = 152.528175\n",
+ "epoch 2138: loss = 1719849.796427, a = 935.323688, b = 152.528158\n",
+ "epoch 2139: loss = 1719849.052191, a = 935.349876, b = 152.528141\n",
+ "epoch 2140: loss = 1719848.310811, a = 935.376010, b = 152.528125\n",
+ "epoch 2141: loss = 1719847.572276, a = 935.402093, b = 152.528108\n",
+ "epoch 2142: loss = 1719846.836575, a = 935.428123, b = 152.528091\n",
+ "epoch 2143: loss = 1719846.103696, a = 935.454102, b = 152.528075\n",
+ "epoch 2144: loss = 1719845.373629, a = 935.480028, b = 152.528058\n",
+ "epoch 2145: loss = 1719844.646362, a = 935.505903, b = 152.528042\n",
+ "epoch 2146: loss = 1719843.921885, a = 935.531726, b = 152.528025\n",
+ "epoch 2147: loss = 1719843.200186, a = 935.557497, b = 152.528009\n",
+ "epoch 2148: loss = 1719842.481255, a = 935.583217, b = 152.527992\n",
+ "epoch 2149: loss = 1719841.765080, a = 935.608885, b = 152.527976\n",
+ "epoch 2150: loss = 1719841.051652, a = 935.634502, b = 152.527959\n",
+ "epoch 2151: loss = 1719840.340960, a = 935.660068, b = 152.527943\n",
+ "epoch 2152: loss = 1719839.632992, a = 935.685582, b = 152.527927\n",
+ "epoch 2153: loss = 1719838.927738, a = 935.711046, b = 152.527911\n",
+ "epoch 2154: loss = 1719838.225187, a = 935.736458, b = 152.527894\n",
+ "epoch 2155: loss = 1719837.525329, a = 935.761820, b = 152.527878\n",
+ "epoch 2156: loss = 1719836.828154, a = 935.787131, b = 152.527862\n",
+ "epoch 2157: loss = 1719836.133650, a = 935.812392, b = 152.527846\n",
+ "epoch 2158: loss = 1719835.441808, a = 935.837602, b = 152.527830\n",
+ "epoch 2159: loss = 1719834.752617, a = 935.862761, b = 152.527814\n",
+ "epoch 2160: loss = 1719834.066066, a = 935.887871, b = 152.527798\n",
+ "epoch 2161: loss = 1719833.382146, a = 935.912930, b = 152.527782\n",
+ "epoch 2162: loss = 1719832.700845, a = 935.937939, b = 152.527766\n",
+ "epoch 2163: loss = 1719832.022154, a = 935.962898, b = 152.527750\n",
+ "epoch 2164: loss = 1719831.346063, a = 935.987807, b = 152.527734\n",
+ "epoch 2165: loss = 1719830.672562, a = 936.012666, b = 152.527718\n",
+ "epoch 2166: loss = 1719830.001639, a = 936.037475, b = 152.527702\n",
+ "epoch 2167: loss = 1719829.333286, a = 936.062235, b = 152.527686\n",
+ "epoch 2168: loss = 1719828.667491, a = 936.086946, b = 152.527670\n",
+ "epoch 2169: loss = 1719828.004246, a = 936.111607, b = 152.527655\n",
+ "epoch 2170: loss = 1719827.343541, a = 936.136218, b = 152.527639\n",
+ "epoch 2171: loss = 1719826.685364, a = 936.160781, b = 152.527623\n",
+ "epoch 2172: loss = 1719826.029707, a = 936.185294, b = 152.527608\n",
+ "epoch 2173: loss = 1719825.376559, a = 936.209758, b = 152.527592\n",
+ "epoch 2174: loss = 1719824.725911, a = 936.234174, b = 152.527576\n",
+ "epoch 2175: loss = 1719824.077753, a = 936.258540, b = 152.527561\n",
+ "epoch 2176: loss = 1719823.432075, a = 936.282858, b = 152.527545\n",
+ "epoch 2177: loss = 1719822.788867, a = 936.307127, b = 152.527530\n",
+ "epoch 2178: loss = 1719822.148121, a = 936.331348, b = 152.527514\n",
+ "epoch 2179: loss = 1719821.509826, a = 936.355520, b = 152.527499\n",
+ "epoch 2180: loss = 1719820.873972, a = 936.379644, b = 152.527484\n",
+ "epoch 2181: loss = 1719820.240551, a = 936.403720, b = 152.527468\n",
+ "epoch 2182: loss = 1719819.609552, a = 936.427747, b = 152.527453\n",
+ "epoch 2183: loss = 1719818.980966, a = 936.451727, b = 152.527437\n",
+ "epoch 2184: loss = 1719818.354784, a = 936.475658, b = 152.527422\n",
+ "epoch 2185: loss = 1719817.730997, a = 936.499542, b = 152.527407\n",
+ "epoch 2186: loss = 1719817.109594, a = 936.523378, b = 152.527392\n",
+ "epoch 2187: loss = 1719816.490568, a = 936.547166, b = 152.527377\n",
+ "epoch 2188: loss = 1719815.873907, a = 936.570907, b = 152.527361\n",
+ "epoch 2189: loss = 1719815.259604, a = 936.594600, b = 152.527346\n",
+ "epoch 2190: loss = 1719814.647649, a = 936.618246, b = 152.527331\n",
+ "epoch 2191: loss = 1719814.038033, a = 936.641844, b = 152.527316\n",
+ "epoch 2192: loss = 1719813.430746, a = 936.665396, b = 152.527301\n",
+ "epoch 2193: loss = 1719812.825780, a = 936.688900, b = 152.527286\n",
+ "epoch 2194: loss = 1719812.223125, a = 936.712357, b = 152.527271\n",
+ "epoch 2195: loss = 1719811.622773, a = 936.735768, b = 152.527256\n",
+ "epoch 2196: loss = 1719811.024714, a = 936.759131, b = 152.527241\n",
+ "epoch 2197: loss = 1719810.428940, a = 936.782448, b = 152.527226\n",
+ "epoch 2198: loss = 1719809.835442, a = 936.805718, b = 152.527211\n",
+ "epoch 2199: loss = 1719809.244210, a = 936.828942, b = 152.527197\n",
+ "epoch 2200: loss = 1719808.655236, a = 936.852119, b = 152.527182\n",
+ "epoch 2201: loss = 1719808.068512, a = 936.875250, b = 152.527167\n",
+ "epoch 2202: loss = 1719807.484027, a = 936.898335, b = 152.527152\n",
+ "epoch 2203: loss = 1719806.901775, a = 936.921373, b = 152.527138\n",
+ "epoch 2204: loss = 1719806.321745, a = 936.944365, b = 152.527123\n",
+ "epoch 2205: loss = 1719805.743929, a = 936.967312, b = 152.527108\n",
+ "epoch 2206: loss = 1719805.168319, a = 936.990212, b = 152.527094\n",
+ "epoch 2207: loss = 1719804.594905, a = 937.013067, b = 152.527079\n",
+ "epoch 2208: loss = 1719804.023681, a = 937.035876, b = 152.527064\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "epoch 2209: loss = 1719803.454636, a = 937.058640, b = 152.527050\n",
+ "epoch 2210: loss = 1719802.887762, a = 937.081357, b = 152.527035\n",
+ "epoch 2211: loss = 1719802.323051, a = 937.104030, b = 152.527021\n",
+ "epoch 2212: loss = 1719801.760495, a = 937.126657, b = 152.527006\n",
+ "epoch 2213: loss = 1719801.200084, a = 937.149239, b = 152.526992\n",
+ "epoch 2214: loss = 1719800.641811, a = 937.171776, b = 152.526978\n",
+ "epoch 2215: loss = 1719800.085668, a = 937.194267, b = 152.526963\n",
+ "epoch 2216: loss = 1719799.531645, a = 937.216714, b = 152.526949\n",
+ "epoch 2217: loss = 1719798.979736, a = 937.239116, b = 152.526935\n",
+ "epoch 2218: loss = 1719798.429930, a = 937.261473, b = 152.526920\n",
+ "epoch 2219: loss = 1719797.882221, a = 937.283785, b = 152.526906\n",
+ "epoch 2220: loss = 1719797.336601, a = 937.306053, b = 152.526892\n",
+ "epoch 2221: loss = 1719796.793060, a = 937.328276, b = 152.526878\n",
+ "epoch 2222: loss = 1719796.251591, a = 937.350455, b = 152.526863\n",
+ "epoch 2223: loss = 1719795.712185, a = 937.372589, b = 152.526849\n",
+ "epoch 2224: loss = 1719795.174836, a = 937.394679, b = 152.526835\n",
+ "epoch 2225: loss = 1719794.639534, a = 937.416725, b = 152.526821\n",
+ "epoch 2226: loss = 1719794.106272, a = 937.438727, b = 152.526807\n",
+ "epoch 2227: loss = 1719793.575042, a = 937.460685, b = 152.526793\n",
+ "epoch 2228: loss = 1719793.045835, a = 937.482599, b = 152.526779\n",
+ "epoch 2229: loss = 1719792.518645, a = 937.504469, b = 152.526765\n",
+ "epoch 2230: loss = 1719791.993463, a = 937.526295, b = 152.526751\n",
+ "epoch 2231: loss = 1719791.470281, a = 937.548078, b = 152.526737\n",
+ "epoch 2232: loss = 1719790.949091, a = 937.569817, b = 152.526723\n",
+ "epoch 2233: loss = 1719790.429886, a = 937.591513, b = 152.526709\n",
+ "epoch 2234: loss = 1719789.912658, a = 937.613165, b = 152.526696\n",
+ "epoch 2235: loss = 1719789.397400, a = 937.634774, b = 152.526682\n",
+ "epoch 2236: loss = 1719788.884103, a = 937.656340, b = 152.526668\n",
+ "epoch 2237: loss = 1719788.372760, a = 937.677863, b = 152.526654\n",
+ "epoch 2238: loss = 1719787.863363, a = 937.699343, b = 152.526641\n",
+ "epoch 2239: loss = 1719787.355906, a = 937.720779, b = 152.526627\n",
+ "epoch 2240: loss = 1719786.850379, a = 937.742173, b = 152.526613\n",
+ "epoch 2241: loss = 1719786.346776, a = 937.763524, b = 152.526600\n",
+ "epoch 2242: loss = 1719785.845089, a = 937.784833, b = 152.526586\n",
+ "epoch 2243: loss = 1719785.345311, a = 937.806098, b = 152.526572\n",
+ "epoch 2244: loss = 1719784.847435, a = 937.827322, b = 152.526559\n",
+ "epoch 2245: loss = 1719784.351452, a = 937.848502, b = 152.526545\n",
+ "epoch 2246: loss = 1719783.857356, a = 937.869641, b = 152.526532\n",
+ "epoch 2247: loss = 1719783.365139, a = 937.890737, b = 152.526518\n",
+ "epoch 2248: loss = 1719782.874794, a = 937.911791, b = 152.526505\n",
+ "epoch 2249: loss = 1719782.386313, a = 937.932803, b = 152.526492\n",
+ "epoch 2250: loss = 1719781.899690, a = 937.953773, b = 152.526478\n",
+ "epoch 2251: loss = 1719781.414916, a = 937.974701, b = 152.526465\n",
+ "epoch 2252: loss = 1719780.931986, a = 937.995587, b = 152.526451\n",
+ "epoch 2253: loss = 1719780.450892, a = 938.016431, b = 152.526438\n",
+ "epoch 2254: loss = 1719779.971625, a = 938.037234, b = 152.526425\n",
+ "epoch 2255: loss = 1719779.494181, a = 938.057995, b = 152.526412\n",
+ "epoch 2256: loss = 1719779.018550, a = 938.078714, b = 152.526398\n",
+ "epoch 2257: loss = 1719778.544727, a = 938.099392, b = 152.526385\n",
+ "epoch 2258: loss = 1719778.072705, a = 938.120029, b = 152.526372\n",
+ "epoch 2259: loss = 1719777.602475, a = 938.140625, b = 152.526359\n",
+ "epoch 2260: loss = 1719777.134032, a = 938.161179, b = 152.526346\n",
+ "epoch 2261: loss = 1719776.667368, a = 938.181692, b = 152.526333\n",
+ "epoch 2262: loss = 1719776.202476, a = 938.202164, b = 152.526319\n",
+ "epoch 2263: loss = 1719775.739350, a = 938.222595, b = 152.526306\n",
+ "epoch 2264: loss = 1719775.277983, a = 938.242986, b = 152.526293\n",
+ "epoch 2265: loss = 1719774.818367, a = 938.263335, b = 152.526280\n",
+ "epoch 2266: loss = 1719774.360496, a = 938.283644, b = 152.526267\n",
+ "epoch 2267: loss = 1719773.904364, a = 938.303913, b = 152.526254\n",
+ "epoch 2268: loss = 1719773.449962, a = 938.324140, b = 152.526242\n",
+ "epoch 2269: loss = 1719772.997286, a = 938.344328, b = 152.526229\n",
+ "epoch 2270: loss = 1719772.546327, a = 938.364475, b = 152.526216\n",
+ "epoch 2271: loss = 1719772.097080, a = 938.384581, b = 152.526203\n",
+ "epoch 2272: loss = 1719771.649537, a = 938.404648, b = 152.526190\n",
+ "epoch 2273: loss = 1719771.203693, a = 938.424674, b = 152.526177\n",
+ "epoch 2274: loss = 1719770.759540, a = 938.444660, b = 152.526165\n",
+ "epoch 2275: loss = 1719770.317071, a = 938.464607, b = 152.526152\n",
+ "epoch 2276: loss = 1719769.876281, a = 938.484513, b = 152.526139\n",
+ "epoch 2277: loss = 1719769.437162, a = 938.504380, b = 152.526126\n",
+ "epoch 2278: loss = 1719768.999709, a = 938.524207, b = 152.526114\n",
+ "epoch 2279: loss = 1719768.563915, a = 938.543994, b = 152.526101\n",
+ "epoch 2280: loss = 1719768.129773, a = 938.563742, b = 152.526089\n",
+ "epoch 2281: loss = 1719767.697276, a = 938.583450, b = 152.526076\n",
+ "epoch 2282: loss = 1719767.266420, a = 938.603119, b = 152.526063\n",
+ "epoch 2283: loss = 1719766.837196, a = 938.622748, b = 152.526051\n",
+ "epoch 2284: loss = 1719766.409599, a = 938.642338, b = 152.526038\n",
+ "epoch 2285: loss = 1719765.983623, a = 938.661889, b = 152.526026\n",
+ "epoch 2286: loss = 1719765.559260, a = 938.681401, b = 152.526013\n",
+ "epoch 2287: loss = 1719765.136506, a = 938.700874, b = 152.526001\n",
+ "epoch 2288: loss = 1719764.715353, a = 938.720308, b = 152.525989\n",
+ "epoch 2289: loss = 1719764.295796, a = 938.739703, b = 152.525976\n",
+ "epoch 2290: loss = 1719763.877827, a = 938.759060, b = 152.525964\n",
+ "epoch 2291: loss = 1719763.461442, a = 938.778377, b = 152.525951\n",
+ "epoch 2292: loss = 1719763.046634, a = 938.797656, b = 152.525939\n",
+ "epoch 2293: loss = 1719762.633396, a = 938.816897, b = 152.525927\n",
+ "epoch 2294: loss = 1719762.221723, a = 938.836099, b = 152.525915\n",
+ "epoch 2295: loss = 1719761.811609, a = 938.855262, b = 152.525902\n",
+ "epoch 2296: loss = 1719761.403047, a = 938.874387, b = 152.525890\n",
+ "epoch 2297: loss = 1719760.996032, a = 938.893474, b = 152.525878\n",
+ "epoch 2298: loss = 1719760.590557, a = 938.912523, b = 152.525866\n",
+ "epoch 2299: loss = 1719760.186616, a = 938.931534, b = 152.525854\n",
+ "epoch 2300: loss = 1719759.784204, a = 938.950507, b = 152.525842\n",
+ "epoch 2301: loss = 1719759.383315, a = 938.969442, b = 152.525829\n",
+ "epoch 2302: loss = 1719758.983942, a = 938.988339, b = 152.525817\n",
+ "epoch 2303: loss = 1719758.586080, a = 939.007198, b = 152.525805\n",
+ "epoch 2304: loss = 1719758.189723, a = 939.026019, b = 152.525793\n",
+ "epoch 2305: loss = 1719757.794866, a = 939.044803, b = 152.525781\n",
+ "epoch 2306: loss = 1719757.401501, a = 939.063549, b = 152.525769\n",
+ "epoch 2307: loss = 1719757.009624, a = 939.082258, b = 152.525757\n",
+ "epoch 2308: loss = 1719756.619228, a = 939.100929, b = 152.525745\n",
+ "epoch 2309: loss = 1719756.230309, a = 939.119563, b = 152.525734\n",
+ "epoch 2310: loss = 1719755.842860, a = 939.138160, b = 152.525722\n",
+ "epoch 2311: loss = 1719755.456875, a = 939.156719, b = 152.525710\n",
+ "epoch 2312: loss = 1719755.072349, a = 939.175242, b = 152.525698\n",
+ "epoch 2313: loss = 1719754.689276, a = 939.193727, b = 152.525686\n",
+ "epoch 2314: loss = 1719754.307651, a = 939.212176, b = 152.525674\n",
+ "epoch 2315: loss = 1719753.927467, a = 939.230587, b = 152.525663\n",
+ "epoch 2316: loss = 1719753.548720, a = 939.248962, b = 152.525651\n",
+ "epoch 2317: loss = 1719753.171404, a = 939.267300, b = 152.525639\n",
+ "epoch 2318: loss = 1719752.795512, a = 939.285601, b = 152.525627\n",
+ "epoch 2319: loss = 1719752.421041, a = 939.303866, b = 152.525616\n",
+ "epoch 2320: loss = 1719752.047983, a = 939.322094, b = 152.525604\n",
+ "epoch 2321: loss = 1719751.676335, a = 939.340286, b = 152.525593\n",
+ "epoch 2322: loss = 1719751.306089, a = 939.358441, b = 152.525581\n",
+ "epoch 2323: loss = 1719750.937241, a = 939.376560, b = 152.525569\n",
+ "epoch 2324: loss = 1719750.569786, a = 939.394643, b = 152.525558\n",
+ "epoch 2325: loss = 1719750.203717, a = 939.412690, b = 152.525546\n",
+ "epoch 2326: loss = 1719749.839030, a = 939.430701, b = 152.525535\n",
+ "epoch 2327: loss = 1719749.475719, a = 939.448675, b = 152.525523\n",
+ "epoch 2328: loss = 1719749.113779, a = 939.466614, b = 152.525512\n",
+ "epoch 2329: loss = 1719748.753205, a = 939.484516, b = 152.525500\n",
+ "epoch 2330: loss = 1719748.393990, a = 939.502383, b = 152.525489\n",
+ "epoch 2331: loss = 1719748.036131, a = 939.520215, b = 152.525478\n",
+ "epoch 2332: loss = 1719747.679621, a = 939.538010, b = 152.525466\n",
+ "epoch 2333: loss = 1719747.324456, a = 939.555770, b = 152.525455\n",
+ "epoch 2334: loss = 1719746.970631, a = 939.573495, b = 152.525444\n",
+ "epoch 2335: loss = 1719746.618139, a = 939.591184, b = 152.525432\n",
+ "epoch 2336: loss = 1719746.266976, a = 939.608837, b = 152.525421\n",
+ "epoch 2337: loss = 1719745.917137, a = 939.626456, b = 152.525410\n",
+ "epoch 2338: loss = 1719745.568616, a = 939.644039, b = 152.525399\n",
+ "epoch 2339: loss = 1719745.221409, a = 939.661587, b = 152.525387\n",
+ "epoch 2340: loss = 1719744.875511, a = 939.679100, b = 152.525376\n",
+ "epoch 2341: loss = 1719744.530916, a = 939.696577, b = 152.525365\n",
+ "epoch 2342: loss = 1719744.187619, a = 939.714020, b = 152.525354\n",
+ "epoch 2343: loss = 1719743.845615, a = 939.731428, b = 152.525343\n",
+ "epoch 2344: loss = 1719743.504900, a = 939.748802, b = 152.525332\n",
+ "epoch 2345: loss = 1719743.165468, a = 939.766140, b = 152.525321\n",
+ "epoch 2346: loss = 1719742.827314, a = 939.783444, b = 152.525310\n",
+ "epoch 2347: loss = 1719742.490434, a = 939.800713, b = 152.525298\n",
+ "epoch 2348: loss = 1719742.154822, a = 939.817948, b = 152.525287\n",
+ "epoch 2349: loss = 1719741.820473, a = 939.835148, b = 152.525276\n",
+ "epoch 2350: loss = 1719741.487384, a = 939.852314, b = 152.525266\n",
+ "epoch 2351: loss = 1719741.155548, a = 939.869445, b = 152.525255\n",
+ "epoch 2352: loss = 1719740.824960, a = 939.886542, b = 152.525244\n",
+ "epoch 2353: loss = 1719740.495617, a = 939.903605, b = 152.525233\n",
+ "epoch 2354: loss = 1719740.167513, a = 939.920634, b = 152.525222\n",
+ "epoch 2355: loss = 1719739.840644, a = 939.937629, b = 152.525211\n",
+ "epoch 2356: loss = 1719739.515004, a = 939.954590, b = 152.525200\n",
+ "epoch 2357: loss = 1719739.190589, a = 939.971517, b = 152.525189\n",
+ "epoch 2358: loss = 1719738.867394, a = 939.988410, b = 152.525179\n",
+ "epoch 2359: loss = 1719738.545415, a = 940.005270, b = 152.525168\n",
+ "epoch 2360: loss = 1719738.224646, a = 940.022095, b = 152.525157\n",
+ "epoch 2361: loss = 1719737.905083, a = 940.038887, b = 152.525146\n",
+ "epoch 2362: loss = 1719737.586722, a = 940.055646, b = 152.525136\n",
+ "epoch 2363: loss = 1719737.269558, a = 940.072370, b = 152.525125\n",
+ "epoch 2364: loss = 1719736.953585, a = 940.089062, b = 152.525114\n",
+ "epoch 2365: loss = 1719736.638800, a = 940.105720, b = 152.525104\n",
+ "epoch 2366: loss = 1719736.325198, a = 940.122345, b = 152.525093\n",
+ "epoch 2367: loss = 1719736.012774, a = 940.138936, b = 152.525082\n",
+ "epoch 2368: loss = 1719735.701524, a = 940.155495, b = 152.525072\n",
+ "epoch 2369: loss = 1719735.391444, a = 940.172020, b = 152.525061\n",
+ "epoch 2370: loss = 1719735.082527, a = 940.188512, b = 152.525051\n",
+ "epoch 2371: loss = 1719734.774771, a = 940.204971, b = 152.525040\n",
+ "epoch 2372: loss = 1719734.468171, a = 940.221397, b = 152.525030\n",
+ "epoch 2373: loss = 1719734.162722, a = 940.237791, b = 152.525019\n",
+ "epoch 2374: loss = 1719733.858420, a = 940.254151, b = 152.525009\n",
+ "epoch 2375: loss = 1719733.555260, a = 940.270479, b = 152.524998\n",
+ "epoch 2376: loss = 1719733.253238, a = 940.286775, b = 152.524988\n",
+ "epoch 2377: loss = 1719732.952350, a = 940.303037, b = 152.524978\n",
+ "epoch 2378: loss = 1719732.652590, a = 940.319268, b = 152.524967\n",
+ "epoch 2379: loss = 1719732.353956, a = 940.335465, b = 152.524957\n",
+ "epoch 2380: loss = 1719732.056441, a = 940.351631, b = 152.524947\n",
+ "epoch 2381: loss = 1719731.760043, a = 940.367764, b = 152.524936\n",
+ "epoch 2382: loss = 1719731.464757, a = 940.383864, b = 152.524926\n",
+ "epoch 2383: loss = 1719731.170578, a = 940.399933, b = 152.524916\n",
+ "epoch 2384: loss = 1719730.877503, a = 940.415969, b = 152.524906\n",
+ "epoch 2385: loss = 1719730.585526, a = 940.431974, b = 152.524895\n",
+ "epoch 2386: loss = 1719730.294644, a = 940.447946, b = 152.524885\n",
+ "epoch 2387: loss = 1719730.004853, a = 940.463887, b = 152.524875\n",
+ "epoch 2388: loss = 1719729.716147, a = 940.479795, b = 152.524865\n",
+ "epoch 2389: loss = 1719729.428524, a = 940.495672, b = 152.524855\n",
+ "epoch 2390: loss = 1719729.141979, a = 940.511517, b = 152.524844\n",
+ "epoch 2391: loss = 1719728.856507, a = 940.527330, b = 152.524834\n",
+ "epoch 2392: loss = 1719728.572105, a = 940.543112, b = 152.524824\n",
+ "epoch 2393: loss = 1719728.288769, a = 940.558862, b = 152.524814\n",
+ "epoch 2394: loss = 1719728.006493, a = 940.574580, b = 152.524804\n",
+ "epoch 2395: loss = 1719727.725275, a = 940.590268, b = 152.524794\n",
+ "epoch 2396: loss = 1719727.445110, a = 940.605923, b = 152.524784\n",
+ "epoch 2397: loss = 1719727.165994, a = 940.621548, b = 152.524774\n",
+ "epoch 2398: loss = 1719726.887924, a = 940.637141, b = 152.524764\n",
+ "epoch 2399: loss = 1719726.610894, a = 940.652703, b = 152.524754\n",
+ "epoch 2400: loss = 1719726.334901, a = 940.668234, b = 152.524744\n",
+ "epoch 2401: loss = 1719726.059941, a = 940.683734, b = 152.524734\n",
+ "epoch 2402: loss = 1719725.786010, a = 940.699203, b = 152.524725\n",
+ "epoch 2403: loss = 1719725.513104, a = 940.714641, b = 152.524715\n",
+ "epoch 2404: loss = 1719725.241219, a = 940.730048, b = 152.524705\n",
+ "epoch 2405: loss = 1719724.970351, a = 940.745424, b = 152.524695\n",
+ "epoch 2406: loss = 1719724.700496, a = 940.760770, b = 152.524685\n",
+ "epoch 2407: loss = 1719724.431651, a = 940.776085, b = 152.524676\n",
+ "epoch 2408: loss = 1719724.163811, a = 940.791369, b = 152.524666\n",
+ "epoch 2409: loss = 1719723.896972, a = 940.806623, b = 152.524656\n",
+ "epoch 2410: loss = 1719723.631131, a = 940.821846, b = 152.524646\n",
+ "epoch 2411: loss = 1719723.366284, a = 940.837039, b = 152.524637\n",
+ "epoch 2412: loss = 1719723.102427, a = 940.852201, b = 152.524627\n",
+ "epoch 2413: loss = 1719722.839556, a = 940.867333, b = 152.524617\n",
+ "epoch 2414: loss = 1719722.577667, a = 940.882435, b = 152.524608\n",
+ "epoch 2415: loss = 1719722.316757, a = 940.897506, b = 152.524598\n",
+ "epoch 2416: loss = 1719722.056821, a = 940.912548, b = 152.524588\n",
+ "epoch 2417: loss = 1719721.797857, a = 940.927559, b = 152.524579\n",
+ "epoch 2418: loss = 1719721.539859, a = 940.942541, b = 152.524569\n",
+ "epoch 2419: loss = 1719721.282826, a = 940.957492, b = 152.524560\n",
+ "epoch 2420: loss = 1719721.026752, a = 940.972414, b = 152.524550\n",
+ "epoch 2421: loss = 1719720.771634, a = 940.987305, b = 152.524541\n",
+ "epoch 2422: loss = 1719720.517469, a = 941.002167, b = 152.524531\n",
+ "epoch 2423: loss = 1719720.264252, a = 941.016999, b = 152.524522\n",
+ "epoch 2424: loss = 1719720.011980, a = 941.031802, b = 152.524512\n",
+ "epoch 2425: loss = 1719719.760650, a = 941.046575, b = 152.524503\n",
+ "epoch 2426: loss = 1719719.510258, a = 941.061318, b = 152.524493\n",
+ "epoch 2427: loss = 1719719.260800, a = 941.076032, b = 152.524484\n",
+ "epoch 2428: loss = 1719719.012273, a = 941.090716, b = 152.524475\n",
+ "epoch 2429: loss = 1719718.764672, a = 941.105371, b = 152.524465\n",
+ "epoch 2430: loss = 1719718.517995, a = 941.119997, b = 152.524456\n",
+ "epoch 2431: loss = 1719718.272238, a = 941.134594, b = 152.524447\n",
+ "epoch 2432: loss = 1719718.027398, a = 941.149161, b = 152.524437\n",
+ "epoch 2433: loss = 1719717.783470, a = 941.163699, b = 152.524428\n",
+ "epoch 2434: loss = 1719717.540451, a = 941.178208, b = 152.524419\n",
+ "epoch 2435: loss = 1719717.298338, a = 941.192688, b = 152.524409\n",
+ "epoch 2436: loss = 1719717.057128, a = 941.207140, b = 152.524400\n",
+ "epoch 2437: loss = 1719716.816816, a = 941.221562, b = 152.524391\n",
+ "epoch 2438: loss = 1719716.577400, a = 941.235955, b = 152.524382\n",
+ "epoch 2439: loss = 1719716.338876, a = 941.250320, b = 152.524373\n",
+ "epoch 2440: loss = 1719716.101240, a = 941.264656, b = 152.524363\n",
+ "epoch 2441: loss = 1719715.864489, a = 941.278963, b = 152.524354\n",
+ "epoch 2442: loss = 1719715.628620, a = 941.293242, b = 152.524345\n",
+ "epoch 2443: loss = 1719715.393629, a = 941.307492, b = 152.524336\n",
+ "epoch 2444: loss = 1719715.159513, a = 941.321714, b = 152.524327\n",
+ "epoch 2445: loss = 1719714.926269, a = 941.335907, b = 152.524318\n",
+ "epoch 2446: loss = 1719714.693893, a = 941.350072, b = 152.524309\n",
+ "epoch 2447: loss = 1719714.462381, a = 941.364208, b = 152.524300\n",
+ "epoch 2448: loss = 1719714.231731, a = 941.378316, b = 152.524291\n",
+ "epoch 2449: loss = 1719714.001940, a = 941.392396, b = 152.524282\n",
+ "epoch 2450: loss = 1719713.773003, a = 941.406448, b = 152.524273\n",
+ "epoch 2451: loss = 1719713.544917, a = 941.420472, b = 152.524264\n",
+ "epoch 2452: loss = 1719713.317680, a = 941.434467, b = 152.524255\n",
+ "epoch 2453: loss = 1719713.091289, a = 941.448435, b = 152.524246\n",
+ "epoch 2454: loss = 1719712.865738, a = 941.462375, b = 152.524237\n",
+ "epoch 2455: loss = 1719712.641027, a = 941.476287, b = 152.524228\n",
+ "epoch 2456: loss = 1719712.417151, a = 941.490171, b = 152.524219\n",
+ "epoch 2457: loss = 1719712.194107, a = 941.504027, b = 152.524211\n",
+ "epoch 2458: loss = 1719711.971892, a = 941.517856, b = 152.524202\n",
+ "epoch 2459: loss = 1719711.750502, a = 941.531657, b = 152.524193\n",
+ "epoch 2460: loss = 1719711.529935, a = 941.545430, b = 152.524184\n",
+ "epoch 2461: loss = 1719711.310188, a = 941.559176, b = 152.524175\n",
+ "epoch 2462: loss = 1719711.091257, a = 941.572894, b = 152.524167\n",
+ "epoch 2463: loss = 1719710.873139, a = 941.586585, b = 152.524158\n",
+ "epoch 2464: loss = 1719710.655831, a = 941.600249, b = 152.524149\n",
+ "epoch 2465: loss = 1719710.439329, a = 941.613885, b = 152.524140\n",
+ "epoch 2466: loss = 1719710.223632, a = 941.627494, b = 152.524132\n",
+ "epoch 2467: loss = 1719710.008735, a = 941.641075, b = 152.524123\n",
+ "epoch 2468: loss = 1719709.794636, a = 941.654630, b = 152.524114\n",
+ "epoch 2469: loss = 1719709.581332, a = 941.668157, b = 152.524106\n",
+ "epoch 2470: loss = 1719709.368819, a = 941.681658, b = 152.524097\n",
+ "epoch 2471: loss = 1719709.157094, a = 941.695131, b = 152.524089\n",
+ "epoch 2472: loss = 1719708.946155, a = 941.708578, b = 152.524080\n",
+ "epoch 2473: loss = 1719708.735998, a = 941.721997, b = 152.524071\n",
+ "epoch 2474: loss = 1719708.526620, a = 941.735390, b = 152.524063\n",
+ "epoch 2475: loss = 1719708.318019, a = 941.748756, b = 152.524054\n",
+ "epoch 2476: loss = 1719708.110192, a = 941.762095, b = 152.524046\n",
+ "epoch 2477: loss = 1719707.903135, a = 941.775408, b = 152.524037\n",
+ "epoch 2478: loss = 1719707.696845, a = 941.788694, b = 152.524029\n",
+ "epoch 2479: loss = 1719707.491320, a = 941.801953, b = 152.524020\n",
+ "epoch 2480: loss = 1719707.286557, a = 941.815186, b = 152.524012\n",
+ "epoch 2481: loss = 1719707.082552, a = 941.828392, b = 152.524003\n",
+ "epoch 2482: loss = 1719706.879303, a = 941.841572, b = 152.523995\n",
+ "epoch 2483: loss = 1719706.676807, a = 941.854726, b = 152.523987\n",
+ "epoch 2484: loss = 1719706.475060, a = 941.867853, b = 152.523978\n",
+ "epoch 2485: loss = 1719706.274061, a = 941.880954, b = 152.523970\n",
+ "epoch 2486: loss = 1719706.073807, a = 941.894029, b = 152.523961\n",
+ "epoch 2487: loss = 1719705.874293, a = 941.907078, b = 152.523953\n",
+ "epoch 2488: loss = 1719705.675518, a = 941.920100, b = 152.523945\n",
+ "epoch 2489: loss = 1719705.477479, a = 941.933097, b = 152.523937\n",
+ "epoch 2490: loss = 1719705.280173, a = 941.946068, b = 152.523928\n",
+ "epoch 2491: loss = 1719705.083597, a = 941.959012, b = 152.523920\n",
+ "epoch 2492: loss = 1719704.887748, a = 941.971931, b = 152.523912\n",
+ "epoch 2493: loss = 1719704.692623, a = 941.984824, b = 152.523903\n",
+ "epoch 2494: loss = 1719704.498220, a = 941.997691, b = 152.523895\n",
+ "epoch 2495: loss = 1719704.304537, a = 942.010533, b = 152.523887\n",
+ "epoch 2496: loss = 1719704.111569, a = 942.023348, b = 152.523879\n",
+ "epoch 2497: loss = 1719703.919315, a = 942.036138, b = 152.523871\n",
+ "epoch 2498: loss = 1719703.727771, a = 942.048903, b = 152.523863\n",
+ "epoch 2499: loss = 1719703.536936, a = 942.061642, b = 152.523854\n",
+ "epoch 2500: loss = 1719703.346805, a = 942.074356, b = 152.523846\n",
+ "epoch 2501: loss = 1719703.157378, a = 942.087044, b = 152.523838\n",
+ "epoch 2502: loss = 1719702.968650, a = 942.099706, b = 152.523830\n",
+ "epoch 2503: loss = 1719702.780619, a = 942.112344, b = 152.523822\n",
+ "epoch 2504: loss = 1719702.593283, a = 942.124956, b = 152.523814\n",
+ "epoch 2505: loss = 1719702.406639, a = 942.137543, b = 152.523806\n",
+ "epoch 2506: loss = 1719702.220684, a = 942.150105, b = 152.523798\n",
+ "epoch 2507: loss = 1719702.035415, a = 942.162641, b = 152.523790\n",
+ "epoch 2508: loss = 1719701.850830, a = 942.175153, b = 152.523782\n",
+ "epoch 2509: loss = 1719701.666927, a = 942.187640, b = 152.523774\n",
+ "epoch 2510: loss = 1719701.483702, a = 942.200101, b = 152.523766\n",
+ "epoch 2511: loss = 1719701.301154, a = 942.212538, b = 152.523758\n",
+ "epoch 2512: loss = 1719701.119279, a = 942.224950, b = 152.523750\n",
+ "epoch 2513: loss = 1719700.938075, a = 942.237337, b = 152.523742\n",
+ "epoch 2514: loss = 1719700.757539, a = 942.249699, b = 152.523734\n",
+ "epoch 2515: loss = 1719700.577669, a = 942.262036, b = 152.523726\n",
+ "epoch 2516: loss = 1719700.398462, a = 942.274349, b = 152.523719\n",
+ "epoch 2517: loss = 1719700.219916, a = 942.286637, b = 152.523711\n",
+ "epoch 2518: loss = 1719700.042028, a = 942.298901, b = 152.523703\n",
+ "epoch 2519: loss = 1719699.864796, a = 942.311140, b = 152.523695\n",
+ "epoch 2520: loss = 1719699.688217, a = 942.323355, b = 152.523687\n",
+ "epoch 2521: loss = 1719699.512289, a = 942.335545, b = 152.523679\n",
+ "epoch 2522: loss = 1719699.337009, a = 942.347711, b = 152.523672\n",
+ "epoch 2523: loss = 1719699.162374, a = 942.359852, b = 152.523664\n",
+ "epoch 2524: loss = 1719698.988383, a = 942.371970, b = 152.523656\n",
+ "epoch 2525: loss = 1719698.815032, a = 942.384063, b = 152.523649\n",
+ "epoch 2526: loss = 1719698.642320, a = 942.396132, b = 152.523641\n",
+ "epoch 2527: loss = 1719698.470244, a = 942.408176, b = 152.523633\n",
+ "epoch 2528: loss = 1719698.298801, a = 942.420197, b = 152.523625\n",
+ "epoch 2529: loss = 1719698.127989, a = 942.432193, b = 152.523618\n",
+ "epoch 2530: loss = 1719697.957806, a = 942.444166, b = 152.523610\n",
+ "epoch 2531: loss = 1719697.788248, a = 942.456115, b = 152.523602\n",
+ "epoch 2532: loss = 1719697.619315, a = 942.468039, b = 152.523595\n",
+ "epoch 2533: loss = 1719697.451003, a = 942.479940, b = 152.523587\n",
+ "epoch 2534: loss = 1719697.283310, a = 942.491817, b = 152.523580\n",
+ "epoch 2535: loss = 1719697.116234, a = 942.503671, b = 152.523572\n",
+ "epoch 2536: loss = 1719696.949772, a = 942.515500, b = 152.523565\n",
+ "epoch 2537: loss = 1719696.783922, a = 942.527306, b = 152.523557\n",
+ "epoch 2538: loss = 1719696.618682, a = 942.539089, b = 152.523549\n",
+ "epoch 2539: loss = 1719696.454049, a = 942.550847, b = 152.523542\n",
+ "epoch 2540: loss = 1719696.290020, a = 942.562583, b = 152.523534\n",
+ "epoch 2541: loss = 1719696.126595, a = 942.574295, b = 152.523527\n",
+ "epoch 2542: loss = 1719695.963770, a = 942.585983, b = 152.523520\n",
+ "epoch 2543: loss = 1719695.801543, a = 942.597648, b = 152.523512\n",
+ "epoch 2544: loss = 1719695.639912, a = 942.609290, b = 152.523505\n",
+ "epoch 2545: loss = 1719695.478874, a = 942.620908, b = 152.523497\n",
+ "epoch 2546: loss = 1719695.318427, a = 942.632503, b = 152.523490\n",
+ "epoch 2547: loss = 1719695.158570, a = 942.644075, b = 152.523482\n",
+ "epoch 2548: loss = 1719694.999299, a = 942.655624, b = 152.523475\n",
+ "epoch 2549: loss = 1719694.840613, a = 942.667150, b = 152.523468\n",
+ "epoch 2550: loss = 1719694.682509, a = 942.678653, b = 152.523460\n",
+ "epoch 2551: loss = 1719694.524985, a = 942.690133, b = 152.523453\n",
+ "epoch 2552: loss = 1719694.368039, a = 942.701589, b = 152.523446\n",
+ "epoch 2553: loss = 1719694.211668, a = 942.713023, b = 152.523438\n",
+ "epoch 2554: loss = 1719694.055871, a = 942.724434, b = 152.523431\n",
+ "epoch 2555: loss = 1719693.900645, a = 942.735822, b = 152.523424\n",
+ "epoch 2556: loss = 1719693.745988, a = 942.747188, b = 152.523417\n",
+ "epoch 2557: loss = 1719693.591898, a = 942.758531, b = 152.523409\n",
+ "epoch 2558: loss = 1719693.438373, a = 942.769851, b = 152.523402\n",
+ "epoch 2559: loss = 1719693.285410, a = 942.781148, b = 152.523395\n",
+ "epoch 2560: loss = 1719693.133008, a = 942.792423, b = 152.523388\n",
+ "epoch 2561: loss = 1719692.981164, a = 942.803675, b = 152.523380\n",
+ "epoch 2562: loss = 1719692.829876, a = 942.814905, b = 152.523373\n",
+ "epoch 2563: loss = 1719692.679142, a = 942.826112, b = 152.523366\n",
+ "epoch 2564: loss = 1719692.528960, a = 942.837297, b = 152.523359\n",
+ "epoch 2565: loss = 1719692.379328, a = 942.848459, b = 152.523352\n",
+ "epoch 2566: loss = 1719692.230244, a = 942.859600, b = 152.523345\n",
+ "epoch 2567: loss = 1719692.081705, a = 942.870717, b = 152.523338\n",
+ "epoch 2568: loss = 1719691.933710, a = 942.881813, b = 152.523331\n",
+ "epoch 2569: loss = 1719691.786256, a = 942.892887, b = 152.523324\n",
+ "epoch 2570: loss = 1719691.639342, a = 942.903938, b = 152.523316\n",
+ "epoch 2571: loss = 1719691.492965, a = 942.914967, b = 152.523309\n",
+ "epoch 2572: loss = 1719691.347123, a = 942.925974, b = 152.523302\n",
+ "epoch 2573: loss = 1719691.201815, a = 942.936960, b = 152.523295\n",
+ "epoch 2574: loss = 1719691.057038, a = 942.947923, b = 152.523288\n",
+ "epoch 2575: loss = 1719690.912790, a = 942.958864, b = 152.523281\n",
+ "epoch 2576: loss = 1719690.769069, a = 942.969783, b = 152.523274\n",
+ "epoch 2577: loss = 1719690.625873, a = 942.980681, b = 152.523267\n",
+ "epoch 2578: loss = 1719690.483201, a = 942.991557, b = 152.523260\n",
+ "epoch 2579: loss = 1719690.341050, a = 943.002411, b = 152.523254\n",
+ "epoch 2580: loss = 1719690.199418, a = 943.013243, b = 152.523247\n",
+ "epoch 2581: loss = 1719690.058303, a = 943.024054, b = 152.523240\n",
+ "epoch 2582: loss = 1719689.917704, a = 943.034843, b = 152.523233\n",
+ "epoch 2583: loss = 1719689.777618, a = 943.045610, b = 152.523226\n",
+ "epoch 2584: loss = 1719689.638043, a = 943.056356, b = 152.523219\n",
+ "epoch 2585: loss = 1719689.498977, a = 943.067081, b = 152.523212\n",
+ "epoch 2586: loss = 1719689.360419, a = 943.077784, b = 152.523205\n",
+ "epoch 2587: loss = 1719689.222367, a = 943.088465, b = 152.523199\n",
+ "epoch 2588: loss = 1719689.084818, a = 943.099126, b = 152.523192\n",
+ "epoch 2589: loss = 1719688.947771, a = 943.109765, b = 152.523185\n",
+ "epoch 2590: loss = 1719688.811224, a = 943.120382, b = 152.523178\n",
+ "epoch 2591: loss = 1719688.675174, a = 943.130979, b = 152.523171\n",
+ "epoch 2592: loss = 1719688.539621, a = 943.141554, b = 152.523165\n",
+ "epoch 2593: loss = 1719688.404562, a = 943.152108, b = 152.523158\n",
+ "epoch 2594: loss = 1719688.269995, a = 943.162641, b = 152.523151\n",
+ "epoch 2595: loss = 1719688.135918, a = 943.173153, b = 152.523145\n",
+ "epoch 2596: loss = 1719688.002330, a = 943.183644, b = 152.523138\n",
+ "epoch 2597: loss = 1719687.869228, a = 943.194114, b = 152.523131\n",
+ "epoch 2598: loss = 1719687.736611, a = 943.204563, b = 152.523124\n",
+ "epoch 2599: loss = 1719687.604477, a = 943.214991, b = 152.523118\n",
+ "epoch 2600: loss = 1719687.472824, a = 943.225398, b = 152.523111\n",
+ "epoch 2601: loss = 1719687.341651, a = 943.235784, b = 152.523105\n",
+ "epoch 2602: loss = 1719687.210955, a = 943.246150, b = 152.523098\n",
+ "epoch 2603: loss = 1719687.080734, a = 943.256495, b = 152.523091\n",
+ "epoch 2604: loss = 1719686.950988, a = 943.266819, b = 152.523085\n",
+ "epoch 2605: loss = 1719686.821713, a = 943.277123, b = 152.523078\n",
+ "epoch 2606: loss = 1719686.692909, a = 943.287406, b = 152.523072\n",
+ "epoch 2607: loss = 1719686.564573, a = 943.297668, b = 152.523065\n",
+ "epoch 2608: loss = 1719686.436703, a = 943.307910, b = 152.523058\n",
+ "epoch 2609: loss = 1719686.309299, a = 943.318132, b = 152.523052\n",
+ "epoch 2610: loss = 1719686.182358, a = 943.328333, b = 152.523045\n",
+ "epoch 2611: loss = 1719686.055878, a = 943.338513, b = 152.523039\n",
+ "epoch 2612: loss = 1719685.929858, a = 943.348673, b = 152.523032\n",
+ "epoch 2613: loss = 1719685.804295, a = 943.358813, b = 152.523026\n",
+ "epoch 2614: loss = 1719685.679189, a = 943.368933, b = 152.523019\n",
+ "epoch 2615: loss = 1719685.554537, a = 943.379032, b = 152.523013\n",
+ "epoch 2616: loss = 1719685.430338, a = 943.389112, b = 152.523007\n",
+ "epoch 2617: loss = 1719685.306590, a = 943.399171, b = 152.523000\n",
+ "epoch 2618: loss = 1719685.183291, a = 943.409210, b = 152.522994\n",
+ "epoch 2619: loss = 1719685.060440, a = 943.419228, b = 152.522987\n",
+ "epoch 2620: loss = 1719684.938034, a = 943.429227, b = 152.522981\n",
+ "epoch 2621: loss = 1719684.816073, a = 943.439206, b = 152.522975\n",
+ "epoch 2622: loss = 1719684.694554, a = 943.449165, b = 152.522968\n",
+ "epoch 2623: loss = 1719684.573476, a = 943.459104, b = 152.522962\n",
+ "epoch 2624: loss = 1719684.452837, a = 943.469023, b = 152.522956\n",
+ "epoch 2625: loss = 1719684.332636, a = 943.478922, b = 152.522949\n",
+ "epoch 2626: loss = 1719684.212870, a = 943.488802, b = 152.522943\n",
+ "epoch 2627: loss = 1719684.093539, a = 943.498662, b = 152.522937\n",
+ "epoch 2628: loss = 1719683.974640, a = 943.508502, b = 152.522930\n",
+ "epoch 2629: loss = 1719683.856171, a = 943.518322, b = 152.522924\n",
+ "epoch 2630: loss = 1719683.738133, a = 943.528123, b = 152.522918\n",
+ "epoch 2631: loss = 1719683.620521, a = 943.537904, b = 152.522912\n",
+ "epoch 2632: loss = 1719683.503336, a = 943.547665, b = 152.522905\n",
+ "epoch 2633: loss = 1719683.386575, a = 943.557407, b = 152.522899\n",
+ "epoch 2634: loss = 1719683.270237, a = 943.567130, b = 152.522893\n",
+ "epoch 2635: loss = 1719683.154320, a = 943.576833, b = 152.522887\n",
+ "epoch 2636: loss = 1719683.038822, a = 943.586516, b = 152.522880\n",
+ "epoch 2637: loss = 1719682.923743, a = 943.596181, b = 152.522874\n",
+ "epoch 2638: loss = 1719682.809080, a = 943.605826, b = 152.522868\n",
+ "epoch 2639: loss = 1719682.694831, a = 943.615451, b = 152.522862\n",
+ "epoch 2640: loss = 1719682.580996, a = 943.625058, b = 152.522856\n",
+ "epoch 2641: loss = 1719682.467573, a = 943.634645, b = 152.522850\n",
+ "epoch 2642: loss = 1719682.354560, a = 943.644213, b = 152.522844\n",
+ "epoch 2643: loss = 1719682.241955, a = 943.653762, b = 152.522838\n",
+ "epoch 2644: loss = 1719682.129757, a = 943.663292, b = 152.522831\n",
+ "epoch 2645: loss = 1719682.017965, a = 943.672803, b = 152.522825\n",
+ "epoch 2646: loss = 1719681.906577, a = 943.682294, b = 152.522819\n",
+ "epoch 2647: loss = 1719681.795591, a = 943.691767, b = 152.522813\n",
+ "epoch 2648: loss = 1719681.685006, a = 943.701221, b = 152.522807\n",
+ "epoch 2649: loss = 1719681.574821, a = 943.710656, b = 152.522801\n",
+ "epoch 2650: loss = 1719681.465033, a = 943.720072, b = 152.522795\n",
+ "epoch 2651: loss = 1719681.355642, a = 943.729469, b = 152.522789\n",
+ "epoch 2652: loss = 1719681.246645, a = 943.738848, b = 152.522783\n",
+ "epoch 2653: loss = 1719681.138042, a = 943.748208, b = 152.522777\n",
+ "epoch 2654: loss = 1719681.029831, a = 943.757548, b = 152.522771\n",
+ "epoch 2655: loss = 1719680.922010, a = 943.766871, b = 152.522765\n",
+ "epoch 2656: loss = 1719680.814578, a = 943.776174, b = 152.522759\n",
+ "epoch 2657: loss = 1719680.707534, a = 943.785460, b = 152.522753\n",
+ "epoch 2658: loss = 1719680.600876, a = 943.794726, b = 152.522748\n",
+ "epoch 2659: loss = 1719680.494602, a = 943.803974, b = 152.522742\n",
+ "epoch 2660: loss = 1719680.388711, a = 943.813203, b = 152.522736\n",
+ "epoch 2661: loss = 1719680.283202, a = 943.822414, b = 152.522730\n",
+ "epoch 2662: loss = 1719680.178073, a = 943.831607, b = 152.522724\n",
+ "epoch 2663: loss = 1719680.073323, a = 943.840781, b = 152.522718\n",
+ "epoch 2664: loss = 1719679.968950, a = 943.849937, b = 152.522712\n",
+ "epoch 2665: loss = 1719679.864953, a = 943.859075, b = 152.522706\n",
+ "epoch 2666: loss = 1719679.761330, a = 943.868194, b = 152.522701\n",
+ "epoch 2667: loss = 1719679.658081, a = 943.877295, b = 152.522695\n",
+ "epoch 2668: loss = 1719679.555203, a = 943.886378, b = 152.522689\n",
+ "epoch 2669: loss = 1719679.452696, a = 943.895443, b = 152.522683\n",
+ "epoch 2670: loss = 1719679.350557, a = 943.904489, b = 152.522677\n",
+ "epoch 2671: loss = 1719679.248786, a = 943.913518, b = 152.522672\n",
+ "epoch 2672: loss = 1719679.147381, a = 943.922528, b = 152.522666\n",
+ "epoch 2673: loss = 1719679.046340, a = 943.931520, b = 152.522660\n",
+ "epoch 2674: loss = 1719678.945663, a = 943.940495, b = 152.522654\n",
+ "epoch 2675: loss = 1719678.845348, a = 943.949451, b = 152.522649\n",
+ "epoch 2676: loss = 1719678.745393, a = 943.958390, b = 152.522643\n",
+ "epoch 2677: loss = 1719678.645798, a = 943.967311, b = 152.522637\n",
+ "epoch 2678: loss = 1719678.546560, a = 943.976213, b = 152.522632\n",
+ "epoch 2679: loss = 1719678.447679, a = 943.985098, b = 152.522626\n",
+ "epoch 2680: loss = 1719678.349153, a = 943.993966, b = 152.522620\n",
+ "epoch 2681: loss = 1719678.250981, a = 944.002815, b = 152.522615\n",
+ "epoch 2682: loss = 1719678.153162, a = 944.011647, b = 152.522609\n",
+ "epoch 2683: loss = 1719678.055694, a = 944.020461, b = 152.522603\n",
+ "epoch 2684: loss = 1719677.958575, a = 944.029258, b = 152.522598\n",
+ "epoch 2685: loss = 1719677.861805, a = 944.038037, b = 152.522592\n",
+ "epoch 2686: loss = 1719677.765383, a = 944.046798, b = 152.522587\n",
+ "epoch 2687: loss = 1719677.669306, a = 944.055542, b = 152.522581\n",
+ "epoch 2688: loss = 1719677.573574, a = 944.064269, b = 152.522575\n",
+ "epoch 2689: loss = 1719677.478185, a = 944.072978, b = 152.522570\n",
+ "epoch 2690: loss = 1719677.383138, a = 944.081669, b = 152.522564\n",
+ "epoch 2691: loss = 1719677.288432, a = 944.090343, b = 152.522559\n",
+ "epoch 2692: loss = 1719677.194065, a = 944.099000, b = 152.522553\n",
+ "epoch 2693: loss = 1719677.100036, a = 944.107640, b = 152.522548\n",
+ "epoch 2694: loss = 1719677.006344, a = 944.116262, b = 152.522542\n",
+ "epoch 2695: loss = 1719676.912988, a = 944.124867, b = 152.522537\n",
+ "epoch 2696: loss = 1719676.819967, a = 944.133455, b = 152.522531\n",
+ "epoch 2697: loss = 1719676.727278, a = 944.142025, b = 152.522526\n",
+ "epoch 2698: loss = 1719676.634921, a = 944.150579, b = 152.522520\n",
+ "epoch 2699: loss = 1719676.542895, a = 944.159115, b = 152.522515\n",
+ "epoch 2700: loss = 1719676.451198, a = 944.167634, b = 152.522509\n",
+ "epoch 2701: loss = 1719676.359830, a = 944.176137, b = 152.522504\n",
+ "epoch 2702: loss = 1719676.268788, a = 944.184622, b = 152.522498\n",
+ "epoch 2703: loss = 1719676.178072, a = 944.193090, b = 152.522493\n",
+ "epoch 2704: loss = 1719676.087680, a = 944.201542, b = 152.522488\n",
+ "epoch 2705: loss = 1719675.997611, a = 944.209976, b = 152.522482\n",
+ "epoch 2706: loss = 1719675.907865, a = 944.218394, b = 152.522477\n",
+ "epoch 2707: loss = 1719675.818439, a = 944.226794, b = 152.522472\n",
+ "epoch 2708: loss = 1719675.729333, a = 944.235178, b = 152.522466\n",
+ "epoch 2709: loss = 1719675.640545, a = 944.243546, b = 152.522461\n",
+ "epoch 2710: loss = 1719675.552074, a = 944.251896, b = 152.522456\n",
+ "epoch 2711: loss = 1719675.463919, a = 944.260230, b = 152.522450\n",
+ "epoch 2712: loss = 1719675.376079, a = 944.268547, b = 152.522445\n",
+ "epoch 2713: loss = 1719675.288553, a = 944.276847, b = 152.522440\n",
+ "epoch 2714: loss = 1719675.201339, a = 944.285131, b = 152.522434\n",
+ "epoch 2715: loss = 1719675.114437, a = 944.293399, b = 152.522429\n",
+ "epoch 2716: loss = 1719675.027844, a = 944.301649, b = 152.522424\n",
+ "epoch 2717: loss = 1719674.941560, a = 944.309884, b = 152.522418\n",
+ "epoch 2718: loss = 1719674.855585, a = 944.318101, b = 152.522413\n",
+ "epoch 2719: loss = 1719674.769915, a = 944.326303, b = 152.522408\n",
+ "epoch 2720: loss = 1719674.684551, a = 944.334488, b = 152.522403\n",
+ "epoch 2721: loss = 1719674.599492, a = 944.342656, b = 152.522398\n",
+ "epoch 2722: loss = 1719674.514736, a = 944.350809, b = 152.522392\n",
+ "epoch 2723: loss = 1719674.430281, a = 944.358945, b = 152.522387\n",
+ "epoch 2724: loss = 1719674.346128, a = 944.367064, b = 152.522382\n",
+ "epoch 2725: loss = 1719674.262274, a = 944.375168, b = 152.522377\n",
+ "epoch 2726: loss = 1719674.178719, a = 944.383255, b = 152.522372\n",
+ "epoch 2727: loss = 1719674.095462, a = 944.391326, b = 152.522366\n",
+ "epoch 2728: loss = 1719674.012501, a = 944.399381, b = 152.522361\n",
+ "epoch 2729: loss = 1719673.929835, a = 944.407420, b = 152.522356\n",
+ "epoch 2730: loss = 1719673.847464, a = 944.415443, b = 152.522351\n",
+ "epoch 2731: loss = 1719673.765385, a = 944.423450, b = 152.522346\n",
+ "epoch 2732: loss = 1719673.683599, a = 944.431440, b = 152.522341\n",
+ "epoch 2733: loss = 1719673.602103, a = 944.439415, b = 152.522336\n",
+ "epoch 2734: loss = 1719673.520897, a = 944.447374, b = 152.522331\n",
+ "epoch 2735: loss = 1719673.439980, a = 944.455317, b = 152.522326\n",
+ "epoch 2736: loss = 1719673.359351, a = 944.463244, b = 152.522321\n",
+ "epoch 2737: loss = 1719673.279008, a = 944.471155, b = 152.522315\n",
+ "epoch 2738: loss = 1719673.198950, a = 944.479050, b = 152.522310\n",
+ "epoch 2739: loss = 1719673.119177, a = 944.486930, b = 152.522305\n",
+ "epoch 2740: loss = 1719673.039688, a = 944.494793, b = 152.522300\n",
+ "epoch 2741: loss = 1719672.960480, a = 944.502642, b = 152.522295\n",
+ "epoch 2742: loss = 1719672.881554, a = 944.510474, b = 152.522290\n",
+ "epoch 2743: loss = 1719672.802908, a = 944.518291, b = 152.522285\n",
+ "epoch 2744: loss = 1719672.724541, a = 944.526092, b = 152.522280\n",
+ "epoch 2745: loss = 1719672.646452, a = 944.533877, b = 152.522275\n",
+ "epoch 2746: loss = 1719672.568640, a = 944.541647, b = 152.522270\n",
+ "epoch 2747: loss = 1719672.491105, a = 944.549401, b = 152.522266\n",
+ "epoch 2748: loss = 1719672.413844, a = 944.557140, b = 152.522261\n",
+ "epoch 2749: loss = 1719672.336857, a = 944.564864, b = 152.522256\n",
+ "epoch 2750: loss = 1719672.260143, a = 944.572572, b = 152.522251\n",
+ "epoch 2751: loss = 1719672.183701, a = 944.580264, b = 152.522246\n",
+ "epoch 2752: loss = 1719672.107530, a = 944.587941, b = 152.522241\n",
+ "epoch 2753: loss = 1719672.031629, a = 944.595603, b = 152.522236\n",
+ "epoch 2754: loss = 1719671.955996, a = 944.603250, b = 152.522231\n",
+ "epoch 2755: loss = 1719671.880631, a = 944.610881, b = 152.522226\n",
+ "epoch 2756: loss = 1719671.805534, a = 944.618497, b = 152.522221\n",
+ "epoch 2757: loss = 1719671.730702, a = 944.626097, b = 152.522217\n",
+ "epoch 2758: loss = 1719671.656135, a = 944.633683, b = 152.522212\n",
+ "epoch 2759: loss = 1719671.581832, a = 944.641253, b = 152.522207\n",
+ "epoch 2760: loss = 1719671.507791, a = 944.648808, b = 152.522202\n",
+ "epoch 2761: loss = 1719671.434013, a = 944.656348, b = 152.522197\n",
+ "epoch 2762: loss = 1719671.360495, a = 944.663873, b = 152.522192\n",
+ "epoch 2763: loss = 1719671.287238, a = 944.671383, b = 152.522188\n",
+ "epoch 2764: loss = 1719671.214239, a = 944.678878, b = 152.522183\n",
+ "epoch 2765: loss = 1719671.141498, a = 944.686358, b = 152.522178\n",
+ "epoch 2766: loss = 1719671.069015, a = 944.693823, b = 152.522173\n",
+ "epoch 2767: loss = 1719670.996787, a = 944.701273, b = 152.522169\n",
+ "epoch 2768: loss = 1719670.924815, a = 944.708708, b = 152.522164\n",
+ "epoch 2769: loss = 1719670.853097, a = 944.716129, b = 152.522159\n",
+ "epoch 2770: loss = 1719670.781632, a = 944.723534, b = 152.522154\n",
+ "epoch 2771: loss = 1719670.710419, a = 944.730925, b = 152.522150\n",
+ "epoch 2772: loss = 1719670.639458, a = 944.738301, b = 152.522145\n",
+ "epoch 2773: loss = 1719670.568747, a = 944.745662, b = 152.522140\n",
+ "epoch 2774: loss = 1719670.498286, a = 944.753008, b = 152.522135\n",
+ "epoch 2775: loss = 1719670.428073, a = 944.760340, b = 152.522131\n",
+ "epoch 2776: loss = 1719670.358107, a = 944.767657, b = 152.522126\n",
+ "epoch 2777: loss = 1719670.288389, a = 944.774959, b = 152.522121\n",
+ "epoch 2778: loss = 1719670.218916, a = 944.782247, b = 152.522117\n",
+ "epoch 2779: loss = 1719670.149688, a = 944.789521, b = 152.522112\n",
+ "epoch 2780: loss = 1719670.080704, a = 944.796779, b = 152.522108\n",
+ "epoch 2781: loss = 1719670.011963, a = 944.804023, b = 152.522103\n",
+ "epoch 2782: loss = 1719669.943464, a = 944.811253, b = 152.522098\n",
+ "epoch 2783: loss = 1719669.875206, a = 944.818468, b = 152.522094\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "epoch 2784: loss = 1719669.807189, a = 944.825669, b = 152.522089\n",
+ "epoch 2785: loss = 1719669.739411, a = 944.832856, b = 152.522084\n",
+ "epoch 2786: loss = 1719669.671871, a = 944.840028, b = 152.522080\n",
+ "epoch 2787: loss = 1719669.604569, a = 944.847185, b = 152.522075\n",
+ "epoch 2788: loss = 1719669.537504, a = 944.854329, b = 152.522071\n",
+ "epoch 2789: loss = 1719669.470675, a = 944.861458, b = 152.522066\n",
+ "epoch 2790: loss = 1719669.404081, a = 944.868573, b = 152.522062\n",
+ "epoch 2791: loss = 1719669.337721, a = 944.875673, b = 152.522057\n",
+ "epoch 2792: loss = 1719669.271594, a = 944.882760, b = 152.522053\n",
+ "epoch 2793: loss = 1719669.205700, a = 944.889832, b = 152.522048\n",
+ "epoch 2794: loss = 1719669.140037, a = 944.896890, b = 152.522044\n",
+ "epoch 2795: loss = 1719669.074604, a = 944.903934, b = 152.522039\n",
+ "epoch 2796: loss = 1719669.009402, a = 944.910964, b = 152.522035\n",
+ "epoch 2797: loss = 1719668.944428, a = 944.917980, b = 152.522030\n",
+ "epoch 2798: loss = 1719668.879683, a = 944.924982, b = 152.522026\n",
+ "epoch 2799: loss = 1719668.815165, a = 944.931970, b = 152.522021\n",
+ "epoch 2800: loss = 1719668.750873, a = 944.938943, b = 152.522017\n",
+ "epoch 2801: loss = 1719668.686807, a = 944.945903, b = 152.522012\n",
+ "epoch 2802: loss = 1719668.622965, a = 944.952849, b = 152.522008\n",
+ "epoch 2803: loss = 1719668.559348, a = 944.959781, b = 152.522003\n",
+ "epoch 2804: loss = 1719668.495953, a = 944.966700, b = 152.521999\n",
+ "epoch 2805: loss = 1719668.432781, a = 944.973604, b = 152.521995\n",
+ "epoch 2806: loss = 1719668.369830, a = 944.980495, b = 152.521990\n",
+ "epoch 2807: loss = 1719668.307100, a = 944.987371, b = 152.521986\n",
+ "epoch 2808: loss = 1719668.244589, a = 944.994234, b = 152.521981\n",
+ "epoch 2809: loss = 1719668.182297, a = 945.001084, b = 152.521977\n",
+ "epoch 2810: loss = 1719668.120224, a = 945.007919, b = 152.521973\n",
+ "epoch 2811: loss = 1719668.058368, a = 945.014741, b = 152.521968\n",
+ "epoch 2812: loss = 1719667.996728, a = 945.021550, b = 152.521964\n",
+ "epoch 2813: loss = 1719667.935304, a = 945.028344, b = 152.521960\n",
+ "epoch 2814: loss = 1719667.874095, a = 945.035126, b = 152.521955\n",
+ "epoch 2815: loss = 1719667.813100, a = 945.041893, b = 152.521951\n",
+ "epoch 2816: loss = 1719667.752318, a = 945.048647, b = 152.521947\n",
+ "epoch 2817: loss = 1719667.691749, a = 945.055388, b = 152.521942\n",
+ "epoch 2818: loss = 1719667.631391, a = 945.062115, b = 152.521938\n",
+ "epoch 2819: loss = 1719667.571245, a = 945.068828, b = 152.521934\n",
+ "epoch 2820: loss = 1719667.511309, a = 945.075529, b = 152.521929\n",
+ "epoch 2821: loss = 1719667.451582, a = 945.082215, b = 152.521925\n",
+ "epoch 2822: loss = 1719667.392063, a = 945.088889, b = 152.521921\n",
+ "epoch 2823: loss = 1719667.332753, a = 945.095549, b = 152.521917\n",
+ "epoch 2824: loss = 1719667.273649, a = 945.102196, b = 152.521912\n",
+ "epoch 2825: loss = 1719667.214752, a = 945.108829, b = 152.521908\n",
+ "epoch 2826: loss = 1719667.156061, a = 945.115449, b = 152.521904\n",
+ "epoch 2827: loss = 1719667.097574, a = 945.122056, b = 152.521900\n",
+ "epoch 2828: loss = 1719667.039291, a = 945.128650, b = 152.521896\n",
+ "epoch 2829: loss = 1719666.981211, a = 945.135230, b = 152.521891\n",
+ "epoch 2830: loss = 1719666.923334, a = 945.141798, b = 152.521887\n",
+ "epoch 2831: loss = 1719666.865659, a = 945.148352, b = 152.521883\n",
+ "epoch 2832: loss = 1719666.808185, a = 945.154893, b = 152.521879\n",
+ "epoch 2833: loss = 1719666.750911, a = 945.161421, b = 152.521875\n",
+ "epoch 2834: loss = 1719666.693836, a = 945.167936, b = 152.521870\n",
+ "epoch 2835: loss = 1719666.636960, a = 945.174438, b = 152.521866\n",
+ "epoch 2836: loss = 1719666.580283, a = 945.180927, b = 152.521862\n",
+ "epoch 2837: loss = 1719666.523802, a = 945.187403, b = 152.521858\n",
+ "epoch 2838: loss = 1719666.467519, a = 945.193866, b = 152.521854\n",
+ "epoch 2839: loss = 1719666.411431, a = 945.200317, b = 152.521850\n",
+ "epoch 2840: loss = 1719666.355538, a = 945.206754, b = 152.521846\n",
+ "epoch 2841: loss = 1719666.299839, a = 945.213178, b = 152.521842\n",
+ "epoch 2842: loss = 1719666.244335, a = 945.219590, b = 152.521837\n",
+ "epoch 2843: loss = 1719666.189023, a = 945.225988, b = 152.521833\n",
+ "epoch 2844: loss = 1719666.133903, a = 945.232374, b = 152.521829\n",
+ "epoch 2845: loss = 1719666.078976, a = 945.238747, b = 152.521825\n",
+ "epoch 2846: loss = 1719666.024238, a = 945.245108, b = 152.521821\n",
+ "epoch 2847: loss = 1719665.969691, a = 945.251456, b = 152.521817\n",
+ "epoch 2848: loss = 1719665.915334, a = 945.257791, b = 152.521813\n",
+ "epoch 2849: loss = 1719665.861165, a = 945.264113, b = 152.521809\n",
+ "epoch 2850: loss = 1719665.807184, a = 945.270423, b = 152.521805\n",
+ "epoch 2851: loss = 1719665.753391, a = 945.276720, b = 152.521801\n",
+ "epoch 2852: loss = 1719665.699784, a = 945.283004, b = 152.521797\n",
+ "epoch 2853: loss = 1719665.646364, a = 945.289276, b = 152.521793\n",
+ "epoch 2854: loss = 1719665.593128, a = 945.295535, b = 152.521789\n",
+ "epoch 2855: loss = 1719665.540077, a = 945.301782, b = 152.521785\n",
+ "epoch 2856: loss = 1719665.487210, a = 945.308016, b = 152.521781\n",
+ "epoch 2857: loss = 1719665.434526, a = 945.314238, b = 152.521777\n",
+ "epoch 2858: loss = 1719665.382025, a = 945.320448, b = 152.521773\n",
+ "epoch 2859: loss = 1719665.329706, a = 945.326645, b = 152.521769\n",
+ "epoch 2860: loss = 1719665.277568, a = 945.332829, b = 152.521765\n",
+ "epoch 2861: loss = 1719665.225610, a = 945.339002, b = 152.521761\n",
+ "epoch 2862: loss = 1719665.173832, a = 945.345162, b = 152.521757\n",
+ "epoch 2863: loss = 1719665.122234, a = 945.351309, b = 152.521753\n",
+ "epoch 2864: loss = 1719665.070814, a = 945.357445, b = 152.521749\n",
+ "epoch 2865: loss = 1719665.019572, a = 945.363568, b = 152.521746\n",
+ "epoch 2866: loss = 1719664.968507, a = 945.369678, b = 152.521742\n",
+ "epoch 2867: loss = 1719664.917619, a = 945.375777, b = 152.521738\n",
+ "epoch 2868: loss = 1719664.866907, a = 945.381863, b = 152.521734\n",
+ "epoch 2869: loss = 1719664.816370, a = 945.387938, b = 152.521730\n",
+ "epoch 2870: loss = 1719664.766007, a = 945.394000, b = 152.521726\n",
+ "epoch 2871: loss = 1719664.715819, a = 945.400050, b = 152.521722\n",
+ "epoch 2872: loss = 1719664.665804, a = 945.406087, b = 152.521718\n",
+ "epoch 2873: loss = 1719664.615962, a = 945.412113, b = 152.521714\n",
+ "epoch 2874: loss = 1719664.566291, a = 945.418127, b = 152.521711\n",
+ "epoch 2875: loss = 1719664.516793, a = 945.424129, b = 152.521707\n",
+ "epoch 2876: loss = 1719664.467465, a = 945.430118, b = 152.521703\n",
+ "epoch 2877: loss = 1719664.418307, a = 945.436096, b = 152.521699\n",
+ "epoch 2878: loss = 1719664.369319, a = 945.442062, b = 152.521695\n",
+ "epoch 2879: loss = 1719664.320500, a = 945.448016, b = 152.521692\n",
+ "epoch 2880: loss = 1719664.271849, a = 945.453958, b = 152.521688\n",
+ "epoch 2881: loss = 1719664.223365, a = 945.459888, b = 152.521684\n",
+ "epoch 2882: loss = 1719664.175049, a = 945.465806, b = 152.521680\n",
+ "epoch 2883: loss = 1719664.126900, a = 945.471712, b = 152.521676\n",
+ "epoch 2884: loss = 1719664.078916, a = 945.477607, b = 152.521673\n",
+ "epoch 2885: loss = 1719664.031097, a = 945.483489, b = 152.521669\n",
+ "epoch 2886: loss = 1719663.983443, a = 945.489360, b = 152.521665\n",
+ "epoch 2887: loss = 1719663.935953, a = 945.495220, b = 152.521661\n",
+ "epoch 2888: loss = 1719663.888627, a = 945.501067, b = 152.521658\n",
+ "epoch 2889: loss = 1719663.841463, a = 945.506903, b = 152.521654\n",
+ "epoch 2890: loss = 1719663.794462, a = 945.512727, b = 152.521650\n",
+ "epoch 2891: loss = 1719663.747622, a = 945.518540, b = 152.521647\n",
+ "epoch 2892: loss = 1719663.700944, a = 945.524341, b = 152.521643\n",
+ "epoch 2893: loss = 1719663.654425, a = 945.530130, b = 152.521639\n",
+ "epoch 2894: loss = 1719663.608067, a = 945.535908, b = 152.521635\n",
+ "epoch 2895: loss = 1719663.561868, a = 945.541674, b = 152.521632\n",
+ "epoch 2896: loss = 1719663.515827, a = 945.547429, b = 152.521628\n",
+ "epoch 2897: loss = 1719663.469945, a = 945.553172, b = 152.521624\n",
+ "epoch 2898: loss = 1719663.424220, a = 945.558903, b = 152.521621\n",
+ "epoch 2899: loss = 1719663.378653, a = 945.564623, b = 152.521617\n",
+ "epoch 2900: loss = 1719663.333241, a = 945.570332, b = 152.521613\n",
+ "epoch 2901: loss = 1719663.287985, a = 945.576030, b = 152.521610\n",
+ "epoch 2902: loss = 1719663.242885, a = 945.581716, b = 152.521606\n",
+ "epoch 2903: loss = 1719663.197939, a = 945.587390, b = 152.521603\n",
+ "epoch 2904: loss = 1719663.153148, a = 945.593053, b = 152.521599\n",
+ "epoch 2905: loss = 1719663.108510, a = 945.598705, b = 152.521595\n",
+ "epoch 2906: loss = 1719663.064024, a = 945.604346, b = 152.521592\n",
+ "epoch 2907: loss = 1719663.019692, a = 945.609975, b = 152.521588\n",
+ "epoch 2908: loss = 1719662.975511, a = 945.615593, b = 152.521585\n",
+ "epoch 2909: loss = 1719662.931481, a = 945.621200, b = 152.521581\n",
+ "epoch 2910: loss = 1719662.887602, a = 945.626796, b = 152.521577\n",
+ "epoch 2911: loss = 1719662.843874, a = 945.632380, b = 152.521574\n",
+ "epoch 2912: loss = 1719662.800295, a = 945.637953, b = 152.521570\n",
+ "epoch 2913: loss = 1719662.756865, a = 945.643515, b = 152.521567\n",
+ "epoch 2914: loss = 1719662.713583, a = 945.649066, b = 152.521563\n",
+ "epoch 2915: loss = 1719662.670450, a = 945.654606, b = 152.521560\n",
+ "epoch 2916: loss = 1719662.627464, a = 945.660135, b = 152.521556\n",
+ "epoch 2917: loss = 1719662.584625, a = 945.665653, b = 152.521553\n",
+ "epoch 2918: loss = 1719662.541932, a = 945.671160, b = 152.521549\n",
+ "epoch 2919: loss = 1719662.499386, a = 945.676655, b = 152.521546\n",
+ "epoch 2920: loss = 1719662.456984, a = 945.682140, b = 152.521542\n",
+ "epoch 2921: loss = 1719662.414727, a = 945.687614, b = 152.521539\n",
+ "epoch 2922: loss = 1719662.372615, a = 945.693077, b = 152.521535\n",
+ "epoch 2923: loss = 1719662.330646, a = 945.698529, b = 152.521532\n",
+ "epoch 2924: loss = 1719662.288821, a = 945.703970, b = 152.521528\n",
+ "epoch 2925: loss = 1719662.247138, a = 945.709400, b = 152.521525\n",
+ "epoch 2926: loss = 1719662.205597, a = 945.714819, b = 152.521521\n",
+ "epoch 2927: loss = 1719662.164198, a = 945.720227, b = 152.521518\n",
+ "epoch 2928: loss = 1719662.122941, a = 945.725625, b = 152.521514\n",
+ "epoch 2929: loss = 1719662.081823, a = 945.731012, b = 152.521511\n",
+ "epoch 2930: loss = 1719662.040846, a = 945.736388, b = 152.521507\n",
+ "epoch 2931: loss = 1719662.000008, a = 945.741753, b = 152.521504\n",
+ "epoch 2932: loss = 1719661.959310, a = 945.747108, b = 152.521501\n",
+ "epoch 2933: loss = 1719661.918750, a = 945.752451, b = 152.521497\n",
+ "epoch 2934: loss = 1719661.878328, a = 945.757785, b = 152.521494\n",
+ "epoch 2935: loss = 1719661.838044, a = 945.763107, b = 152.521490\n",
+ "epoch 2936: loss = 1719661.797896, a = 945.768419, b = 152.521487\n",
+ "epoch 2937: loss = 1719661.757886, a = 945.773720, b = 152.521484\n",
+ "epoch 2938: loss = 1719661.718011, a = 945.779011, b = 152.521480\n",
+ "epoch 2939: loss = 1719661.678272, a = 945.784291, b = 152.521477\n",
+ "epoch 2940: loss = 1719661.638668, a = 945.789560, b = 152.521473\n",
+ "epoch 2941: loss = 1719661.599198, a = 945.794819, b = 152.521470\n",
+ "epoch 2942: loss = 1719661.559863, a = 945.800068, b = 152.521467\n",
+ "epoch 2943: loss = 1719661.520661, a = 945.805306, b = 152.521463\n",
+ "epoch 2944: loss = 1719661.481592, a = 945.810533, b = 152.521460\n",
+ "epoch 2945: loss = 1719661.442656, a = 945.815750, b = 152.521457\n",
+ "epoch 2946: loss = 1719661.403852, a = 945.820957, b = 152.521453\n",
+ "epoch 2947: loss = 1719661.365180, a = 945.826153, b = 152.521450\n",
+ "epoch 2948: loss = 1719661.326639, a = 945.831339, b = 152.521447\n",
+ "epoch 2949: loss = 1719661.288228, a = 945.836514, b = 152.521443\n",
+ "epoch 2950: loss = 1719661.249948, a = 945.841679, b = 152.521440\n",
+ "epoch 2951: loss = 1719661.211798, a = 945.846834, b = 152.521437\n",
+ "epoch 2952: loss = 1719661.173777, a = 945.851978, b = 152.521434\n",
+ "epoch 2953: loss = 1719661.135884, a = 945.857112, b = 152.521430\n",
+ "epoch 2954: loss = 1719661.098120, a = 945.862236, b = 152.521427\n",
+ "epoch 2955: loss = 1719661.060484, a = 945.867350, b = 152.521424\n",
+ "epoch 2956: loss = 1719661.022975, a = 945.872453, b = 152.521420\n",
+ "epoch 2957: loss = 1719660.985594, a = 945.877546, b = 152.521417\n",
+ "epoch 2958: loss = 1719660.948338, a = 945.882629, b = 152.521414\n",
+ "epoch 2959: loss = 1719660.911209, a = 945.887702, b = 152.521411\n",
+ "epoch 2960: loss = 1719660.874205, a = 945.892765, b = 152.521408\n",
+ "epoch 2961: loss = 1719660.837327, a = 945.897818, b = 152.521404\n",
+ "epoch 2962: loss = 1719660.800573, a = 945.902860, b = 152.521401\n",
+ "epoch 2963: loss = 1719660.763943, a = 945.907892, b = 152.521398\n",
+ "epoch 2964: loss = 1719660.727437, a = 945.912915, b = 152.521395\n",
+ "epoch 2965: loss = 1719660.691055, a = 945.917927, b = 152.521391\n",
+ "epoch 2966: loss = 1719660.654795, a = 945.922929, b = 152.521388\n",
+ "epoch 2967: loss = 1719660.618658, a = 945.927922, b = 152.521385\n",
+ "epoch 2968: loss = 1719660.582642, a = 945.932904, b = 152.521382\n",
+ "epoch 2969: loss = 1719660.546748, a = 945.937876, b = 152.521379\n",
+ "epoch 2970: loss = 1719660.510975, a = 945.942839, b = 152.521376\n",
+ "epoch 2971: loss = 1719660.475323, a = 945.947791, b = 152.521372\n",
+ "epoch 2972: loss = 1719660.439791, a = 945.952734, b = 152.521369\n",
+ "epoch 2973: loss = 1719660.404379, a = 945.957666, b = 152.521366\n",
+ "epoch 2974: loss = 1719660.369086, a = 945.962589, b = 152.521363\n",
+ "epoch 2975: loss = 1719660.333912, a = 945.967502, b = 152.521360\n",
+ "epoch 2976: loss = 1719660.298857, a = 945.972405, b = 152.521357\n",
+ "epoch 2977: loss = 1719660.263920, a = 945.977298, b = 152.521354\n",
+ "epoch 2978: loss = 1719660.229100, a = 945.982182, b = 152.521350\n",
+ "epoch 2979: loss = 1719660.194397, a = 945.987056, b = 152.521347\n",
+ "epoch 2980: loss = 1719660.159811, a = 945.991920, b = 152.521344\n",
+ "epoch 2981: loss = 1719660.125342, a = 945.996774, b = 152.521341\n",
+ "epoch 2982: loss = 1719660.090988, a = 946.001619, b = 152.521338\n",
+ "epoch 2983: loss = 1719660.056750, a = 946.006454, b = 152.521335\n",
+ "epoch 2984: loss = 1719660.022627, a = 946.011279, b = 152.521332\n",
+ "epoch 2985: loss = 1719659.988619, a = 946.016094, b = 152.521329\n",
+ "epoch 2986: loss = 1719659.954725, a = 946.020900, b = 152.521326\n",
+ "epoch 2987: loss = 1719659.920945, a = 946.025697, b = 152.521323\n",
+ "epoch 2988: loss = 1719659.887278, a = 946.030483, b = 152.521320\n",
+ "epoch 2989: loss = 1719659.853724, a = 946.035261, b = 152.521316\n",
+ "epoch 2990: loss = 1719659.820283, a = 946.040028, b = 152.521313\n",
+ "epoch 2991: loss = 1719659.786954, a = 946.044786, b = 152.521310\n",
+ "epoch 2992: loss = 1719659.753737, a = 946.049535, b = 152.521307\n",
+ "epoch 2993: loss = 1719659.720631, a = 946.054274, b = 152.521304\n",
+ "epoch 2994: loss = 1719659.687636, a = 946.059004, b = 152.521301\n",
+ "epoch 2995: loss = 1719659.654752, a = 946.063724, b = 152.521298\n",
+ "epoch 2996: loss = 1719659.621978, a = 946.068434, b = 152.521295\n",
+ "epoch 2997: loss = 1719659.589314, a = 946.073136, b = 152.521292\n",
+ "epoch 2998: loss = 1719659.556759, a = 946.077828, b = 152.521289\n",
+ "epoch 2999: loss = 1719659.524314, a = 946.082510, b = 152.521286\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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c845x3G/0047jViZaiwzZsygoqLCVzs00WTagqVUkKmJxzT2aI8+AaSUSCl57bXXHPe9/fbbU9AiZ2bMmMFll11Gbm5uuptSr2msnm0myjo1zjQYjz4Z3tV9993Hsccey7HHHsuMcL6d9evX06lTJ6644gqOPfZYNmzYEFUw5O9//zudOnXi5JNPZujQodxzzz0ADB8+nLlz5wJGgZEJEybQo0cPunbtypo1awD46KOPOOmkkygoKKBPnz6sXWvvJVVWVnLJJZdw9NFHc/7551NZuffLdt1119GrVy+6dOnChAkTAHjggQf47rvv6N+/P/3791fup3GmsXq2KvlmumWdGnsahEefDO+qpKSEJ554gmXLliGl5MQTT+TUU0+lRYsWfPHFF8yaNYvevXtHHfPxxx8zb948VqxYQVVVFT169KBnz56W5z/ooIP45JNPePjhh7nnnnt47LHH6Ny5M++99x5NmjRh0aJF3HLLLXWZMa145JFHyM3NZfXq1axcuZIePXrUvXbHHXfQsmVLampqOP3001m5ciU33HAD9913H4sXL+aggw5S7tetWzdf96wx0Vg9W514rH7SIAx9olnzrHj//fc5//zz2WeffQAYMmQI7733HoMHD+awww6LM/IAS5Ys4bzzzqN58+Y0b96cc889V3n+IUOGANCzZ8+6dMbbt29n2LBhfPHFFwghqKqqsm3ju+++yw033ABAt27dogz0Cy+8wMyZM6murmbTpk18/vnnlgbc7X7JJNNUHG7a43bBUn3smx1a1umCzZvhzjuhaVO46650twZoIIY+1d6VafwTwUx3nJ2dTXV1NQC33nor/fv35+WXX2b9+vWcdtppvs799ddfc8899/Dxxx/TokULhg8fzq5du3zvl0wyLdbttj1uPNv62jcn9OpXBb/8AtOnwz33wM6dcO21ICUIke6WNYwYfTLihqeccgpFRUVUVFSwc+dOXn75ZU455RTbY/r27csrr7zCrl272LFjB6+++qqna27fvp38fOML9OSTTzruH5kK+bPPPqsrY/jzzz+zzz77cMABB/DDDz/w+uuv1x2z33778csvvzjulyoyLdbttj1uUurW175lAvVK0bRnD/zjH3D44TBhAvz61/DZZ/Dwwxlh5KGBePTJiBv26NGD4cOHc8IJJwBwzTXXUFBQwPr165XHHH/88Qwe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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "n_epoch = 3000 # epoch size\n",
+ "a, b = 1, 1 # initial parameters\n",
+ "epsilon = 0.001 # learning rate\n",
+ "\n",
+ "for i in range(n_epoch):\n",
+ " for j in range(N):\n",
+ " a = a + epsilon*2*(Y[j] - a*X[j] - b)*X[j]\n",
+ " b = b + epsilon*2*(Y[j] - a*X[j] - b)\n",
+ "\n",
+ " L = 0\n",
+ " for j in range(N):\n",
+ " L = L + (Y[j]-a*X[j]-b)**2\n",
+ " print(\"epoch %4d: loss = %f, a = %f, b = %f\" % (i, L, a, b))\n",
+ " \n",
+ "x_min = np.min(X)\n",
+ "x_max = np.max(X)\n",
+ "y_min = a * x_min + b\n",
+ "y_max = a * x_max + b\n",
+ "\n",
+ "plt.scatter(X, Y, label='original data')\n",
+ "plt.plot([x_min, x_max], [y_min, y_max], 'r', label='model')\n",
+ "plt.legend()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## How to show the iterative process"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "application/javascript": [
+ "/* Put everything inside the global mpl namespace */\n",
+ "window.mpl = {};\n",
+ "\n",
+ "\n",
+ "mpl.get_websocket_type = function() {\n",
+ " if (typeof(WebSocket) !== 'undefined') {\n",
+ " return WebSocket;\n",
+ " } else if (typeof(MozWebSocket) !== 'undefined') {\n",
+ " return MozWebSocket;\n",
+ " } else {\n",
+ " alert('Your browser does not have WebSocket support.' +\n",
+ " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
+ " 'Firefox 4 and 5 are also supported but you ' +\n",
+ " 'have to enable WebSockets in about:config.');\n",
+ " };\n",
+ "}\n",
+ "\n",
+ "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
+ " this.id = figure_id;\n",
+ "\n",
+ " this.ws = websocket;\n",
+ "\n",
+ " this.supports_binary = (this.ws.binaryType != undefined);\n",
+ "\n",
+ " if (!this.supports_binary) {\n",
+ " var warnings = document.getElementById(\"mpl-warnings\");\n",
+ " if (warnings) {\n",
+ " warnings.style.display = 'block';\n",
+ " warnings.textContent = (\n",
+ " \"This browser does not support binary websocket messages. \" +\n",
+ " \"Performance may be slow.\");\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " this.imageObj = new Image();\n",
+ "\n",
+ " this.context = undefined;\n",
+ " this.message = undefined;\n",
+ " this.canvas = undefined;\n",
+ " this.rubberband_canvas = undefined;\n",
+ " this.rubberband_context = undefined;\n",
+ " this.format_dropdown = undefined;\n",
+ "\n",
+ " this.image_mode = 'full';\n",
+ "\n",
+ " this.root = $('');\n",
+ " this._root_extra_style(this.root)\n",
+ " this.root.attr('style', 'display: inline-block');\n",
+ "\n",
+ " $(parent_element).append(this.root);\n",
+ "\n",
+ " this._init_header(this);\n",
+ " this._init_canvas(this);\n",
+ " this._init_toolbar(this);\n",
+ "\n",
+ " var fig = this;\n",
+ "\n",
+ " this.waiting = false;\n",
+ "\n",
+ " this.ws.onopen = function () {\n",
+ " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
+ " fig.send_message(\"send_image_mode\", {});\n",
+ " if (mpl.ratio != 1) {\n",
+ " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
+ " }\n",
+ " fig.send_message(\"refresh\", {});\n",
+ " }\n",
+ "\n",
+ " this.imageObj.onload = function() {\n",
+ " if (fig.image_mode == 'full') {\n",
+ " // Full images could contain transparency (where diff images\n",
+ " // almost always do), so we need to clear the canvas so that\n",
+ " // there is no ghosting.\n",
+ " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
+ " }\n",
+ " fig.context.drawImage(fig.imageObj, 0, 0);\n",
+ " };\n",
+ "\n",
+ " this.imageObj.onunload = function() {\n",
+ " fig.ws.close();\n",
+ " }\n",
+ "\n",
+ " this.ws.onmessage = this._make_on_message_function(this);\n",
+ "\n",
+ " this.ondownload = ondownload;\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype._init_header = function() {\n",
+ " var titlebar = $(\n",
+ " '');\n",
+ " var titletext = $(\n",
+ " '');\n",
+ " titlebar.append(titletext)\n",
+ " this.root.append(titlebar);\n",
+ " this.header = titletext[0];\n",
+ "}\n",
+ "\n",
+ "\n",
+ "\n",
+ "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
+ "\n",
+ "}\n",
+ "\n",
+ "\n",
+ "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
+ "\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype._init_canvas = function() {\n",
+ " var fig = this;\n",
+ "\n",
+ " var canvas_div = $('');\n",
+ "\n",
+ " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
+ "\n",
+ " function canvas_keyboard_event(event) {\n",
+ " return fig.key_event(event, event['data']);\n",
+ " }\n",
+ "\n",
+ " canvas_div.keydown('key_press', canvas_keyboard_event);\n",
+ " canvas_div.keyup('key_release', canvas_keyboard_event);\n",
+ " this.canvas_div = canvas_div\n",
+ " this._canvas_extra_style(canvas_div)\n",
+ " this.root.append(canvas_div);\n",
+ "\n",
+ " var canvas = $('');\n",
+ " canvas.addClass('mpl-canvas');\n",
+ " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
+ "\n",
+ " this.canvas = canvas[0];\n",
+ " this.context = canvas[0].getContext(\"2d\");\n",
+ "\n",
+ " var backingStore = this.context.backingStorePixelRatio ||\n",
+ "\tthis.context.webkitBackingStorePixelRatio ||\n",
+ "\tthis.context.mozBackingStorePixelRatio ||\n",
+ "\tthis.context.msBackingStorePixelRatio ||\n",
+ "\tthis.context.oBackingStorePixelRatio ||\n",
+ "\tthis.context.backingStorePixelRatio || 1;\n",
+ "\n",
+ " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
+ "\n",
+ " var rubberband = $('');\n",
+ " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
+ "\n",
+ " var pass_mouse_events = true;\n",
+ "\n",
+ " canvas_div.resizable({\n",
+ " start: function(event, ui) {\n",
+ " pass_mouse_events = false;\n",
+ " },\n",
+ " resize: function(event, ui) {\n",
+ " fig.request_resize(ui.size.width, ui.size.height);\n",
+ " },\n",
+ " stop: function(event, ui) {\n",
+ " pass_mouse_events = true;\n",
+ " fig.request_resize(ui.size.width, ui.size.height);\n",
+ " },\n",
+ " });\n",
+ "\n",
+ " function mouse_event_fn(event) {\n",
+ " if (pass_mouse_events)\n",
+ " return fig.mouse_event(event, event['data']);\n",
+ " }\n",
+ "\n",
+ " rubberband.mousedown('button_press', mouse_event_fn);\n",
+ " rubberband.mouseup('button_release', mouse_event_fn);\n",
+ " // Throttle sequential mouse events to 1 every 20ms.\n",
+ " rubberband.mousemove('motion_notify', mouse_event_fn);\n",
+ "\n",
+ " rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
+ " rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
+ "\n",
+ " canvas_div.on(\"wheel\", function (event) {\n",
+ " event = event.originalEvent;\n",
+ " event['data'] = 'scroll'\n",
+ " if (event.deltaY < 0) {\n",
+ " event.step = 1;\n",
+ " } else {\n",
+ " event.step = -1;\n",
+ " }\n",
+ " mouse_event_fn(event);\n",
+ " });\n",
+ "\n",
+ " canvas_div.append(canvas);\n",
+ " canvas_div.append(rubberband);\n",
+ "\n",
+ " this.rubberband = rubberband;\n",
+ " this.rubberband_canvas = rubberband[0];\n",
+ " this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
+ " this.rubberband_context.strokeStyle = \"#000000\";\n",
+ "\n",
+ " this._resize_canvas = function(width, height) {\n",
+ " // Keep the size of the canvas, canvas container, and rubber band\n",
+ " // canvas in synch.\n",
+ " canvas_div.css('width', width)\n",
+ " canvas_div.css('height', height)\n",
+ "\n",
+ " canvas.attr('width', width * mpl.ratio);\n",
+ " canvas.attr('height', height * mpl.ratio);\n",
+ " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
+ "\n",
+ " rubberband.attr('width', width);\n",
+ " rubberband.attr('height', height);\n",
+ " }\n",
+ "\n",
+ " // Set the figure to an initial 600x600px, this will subsequently be updated\n",
+ " // upon first draw.\n",
+ " this._resize_canvas(600, 600);\n",
+ "\n",
+ " // Disable right mouse context menu.\n",
+ " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
+ " return false;\n",
+ " });\n",
+ "\n",
+ " function set_focus () {\n",
+ " canvas.focus();\n",
+ " canvas_div.focus();\n",
+ " }\n",
+ "\n",
+ " window.setTimeout(set_focus, 100);\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype._init_toolbar = function() {\n",
+ " var fig = this;\n",
+ "\n",
+ " var nav_element = $('')\n",
+ " nav_element.attr('style', 'width: 100%');\n",
+ " this.root.append(nav_element);\n",
+ "\n",
+ " // Define a callback function for later on.\n",
+ " function toolbar_event(event) {\n",
+ " return fig.toolbar_button_onclick(event['data']);\n",
+ " }\n",
+ " function toolbar_mouse_event(event) {\n",
+ " return fig.toolbar_button_onmouseover(event['data']);\n",
+ " }\n",
+ "\n",
+ " for(var toolbar_ind in mpl.toolbar_items) {\n",
+ " var name = mpl.toolbar_items[toolbar_ind][0];\n",
+ " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
+ " var image = mpl.toolbar_items[toolbar_ind][2];\n",
+ " var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
+ "\n",
+ " if (!name) {\n",
+ " // put a spacer in here.\n",
+ " continue;\n",
+ " }\n",
+ " var button = $('');\n",
+ " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
+ " 'ui-button-icon-only');\n",
+ " button.attr('role', 'button');\n",
+ " button.attr('aria-disabled', 'false');\n",
+ " button.click(method_name, toolbar_event);\n",
+ " button.mouseover(tooltip, toolbar_mouse_event);\n",
+ "\n",
+ " var icon_img = $('');\n",
+ " icon_img.addClass('ui-button-icon-primary ui-icon');\n",
+ " icon_img.addClass(image);\n",
+ " icon_img.addClass('ui-corner-all');\n",
+ "\n",
+ " var tooltip_span = $('');\n",
+ " tooltip_span.addClass('ui-button-text');\n",
+ " tooltip_span.html(tooltip);\n",
+ "\n",
+ " button.append(icon_img);\n",
+ " button.append(tooltip_span);\n",
+ "\n",
+ " nav_element.append(button);\n",
+ " }\n",
+ "\n",
+ " var fmt_picker_span = $('');\n",
+ "\n",
+ " var fmt_picker = $('');\n",
+ " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
+ " fmt_picker_span.append(fmt_picker);\n",
+ " nav_element.append(fmt_picker_span);\n",
+ " this.format_dropdown = fmt_picker[0];\n",
+ "\n",
+ " for (var ind in mpl.extensions) {\n",
+ " var fmt = mpl.extensions[ind];\n",
+ " var option = $(\n",
+ " '', {selected: fmt === mpl.default_extension}).html(fmt);\n",
+ " fmt_picker.append(option)\n",
+ " }\n",
+ "\n",
+ " // Add hover states to the ui-buttons\n",
+ " $( \".ui-button\" ).hover(\n",
+ " function() { $(this).addClass(\"ui-state-hover\");},\n",
+ " function() { $(this).removeClass(\"ui-state-hover\");}\n",
+ " );\n",
+ "\n",
+ " var status_bar = $('');\n",
+ " nav_element.append(status_bar);\n",
+ " this.message = status_bar[0];\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
+ " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
+ " // which will in turn request a refresh of the image.\n",
+ " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.send_message = function(type, properties) {\n",
+ " properties['type'] = type;\n",
+ " properties['figure_id'] = this.id;\n",
+ " this.ws.send(JSON.stringify(properties));\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.send_draw_message = function() {\n",
+ " if (!this.waiting) {\n",
+ " this.waiting = true;\n",
+ " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
+ " }\n",
+ "}\n",
+ "\n",
+ "\n",
+ "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
+ " var format_dropdown = fig.format_dropdown;\n",
+ " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
+ " fig.ondownload(fig, format);\n",
+ "}\n",
+ "\n",
+ "\n",
+ "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
+ " var size = msg['size'];\n",
+ " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
+ " fig._resize_canvas(size[0], size[1]);\n",
+ " fig.send_message(\"refresh\", {});\n",
+ " };\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
+ " var x0 = msg['x0'] / mpl.ratio;\n",
+ " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
+ " var x1 = msg['x1'] / mpl.ratio;\n",
+ " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
+ " x0 = Math.floor(x0) + 0.5;\n",
+ " y0 = Math.floor(y0) + 0.5;\n",
+ " x1 = Math.floor(x1) + 0.5;\n",
+ " y1 = Math.floor(y1) + 0.5;\n",
+ " var min_x = Math.min(x0, x1);\n",
+ " var min_y = Math.min(y0, y1);\n",
+ " var width = Math.abs(x1 - x0);\n",
+ " var height = Math.abs(y1 - y0);\n",
+ "\n",
+ " fig.rubberband_context.clearRect(\n",
+ " 0, 0, fig.canvas.width, fig.canvas.height);\n",
+ "\n",
+ " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
+ " // Updates the figure title.\n",
+ " fig.header.textContent = msg['label'];\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
+ " var cursor = msg['cursor'];\n",
+ " switch(cursor)\n",
+ " {\n",
+ " case 0:\n",
+ " cursor = 'pointer';\n",
+ " break;\n",
+ " case 1:\n",
+ " cursor = 'default';\n",
+ " break;\n",
+ " case 2:\n",
+ " cursor = 'crosshair';\n",
+ " break;\n",
+ " case 3:\n",
+ " cursor = 'move';\n",
+ " break;\n",
+ " }\n",
+ " fig.rubberband_canvas.style.cursor = cursor;\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
+ " fig.message.textContent = msg['message'];\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
+ " // Request the server to send over a new figure.\n",
+ " fig.send_draw_message();\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
+ " fig.image_mode = msg['mode'];\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.updated_canvas_event = function() {\n",
+ " // Called whenever the canvas gets updated.\n",
+ " this.send_message(\"ack\", {});\n",
+ "}\n",
+ "\n",
+ "// A function to construct a web socket function for onmessage handling.\n",
+ "// Called in the figure constructor.\n",
+ "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
+ " return function socket_on_message(evt) {\n",
+ " if (evt.data instanceof Blob) {\n",
+ " /* FIXME: We get \"Resource interpreted as Image but\n",
+ " * transferred with MIME type text/plain:\" errors on\n",
+ " * Chrome. But how to set the MIME type? It doesn't seem\n",
+ " * to be part of the websocket stream */\n",
+ " evt.data.type = \"image/png\";\n",
+ "\n",
+ " /* Free the memory for the previous frames */\n",
+ " if (fig.imageObj.src) {\n",
+ " (window.URL || window.webkitURL).revokeObjectURL(\n",
+ " fig.imageObj.src);\n",
+ " }\n",
+ "\n",
+ " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
+ " evt.data);\n",
+ " fig.updated_canvas_event();\n",
+ " fig.waiting = false;\n",
+ " return;\n",
+ " }\n",
+ " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
+ " fig.imageObj.src = evt.data;\n",
+ " fig.updated_canvas_event();\n",
+ " fig.waiting = false;\n",
+ " return;\n",
+ " }\n",
+ "\n",
+ " var msg = JSON.parse(evt.data);\n",
+ " var msg_type = msg['type'];\n",
+ "\n",
+ " // Call the \"handle_{type}\" callback, which takes\n",
+ " // the figure and JSON message as its only arguments.\n",
+ " try {\n",
+ " var callback = fig[\"handle_\" + msg_type];\n",
+ " } catch (e) {\n",
+ " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
+ " return;\n",
+ " }\n",
+ "\n",
+ " if (callback) {\n",
+ " try {\n",
+ " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
+ " callback(fig, msg);\n",
+ " } catch (e) {\n",
+ " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
+ " }\n",
+ " }\n",
+ " };\n",
+ "}\n",
+ "\n",
+ "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
+ "mpl.findpos = function(e) {\n",
+ " //this section is from http://www.quirksmode.org/js/events_properties.html\n",
+ " var targ;\n",
+ " if (!e)\n",
+ " e = window.event;\n",
+ " if (e.target)\n",
+ " targ = e.target;\n",
+ " else if (e.srcElement)\n",
+ " targ = e.srcElement;\n",
+ " if (targ.nodeType == 3) // defeat Safari bug\n",
+ " targ = targ.parentNode;\n",
+ "\n",
+ " // jQuery normalizes the pageX and pageY\n",
+ " // pageX,Y are the mouse positions relative to the document\n",
+ " // offset() returns the position of the element relative to the document\n",
+ " var x = e.pageX - $(targ).offset().left;\n",
+ " var y = e.pageY - $(targ).offset().top;\n",
+ "\n",
+ " return {\"x\": x, \"y\": y};\n",
+ "};\n",
+ "\n",
+ "/*\n",
+ " * return a copy of an object with only non-object keys\n",
+ " * we need this to avoid circular references\n",
+ " * http://stackoverflow.com/a/24161582/3208463\n",
+ " */\n",
+ "function simpleKeys (original) {\n",
+ " return Object.keys(original).reduce(function (obj, key) {\n",
+ " if (typeof original[key] !== 'object')\n",
+ " obj[key] = original[key]\n",
+ " return obj;\n",
+ " }, {});\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.mouse_event = function(event, name) {\n",
+ " var canvas_pos = mpl.findpos(event)\n",
+ "\n",
+ " if (name === 'button_press')\n",
+ " {\n",
+ " this.canvas.focus();\n",
+ " this.canvas_div.focus();\n",
+ " }\n",
+ "\n",
+ " var x = canvas_pos.x * mpl.ratio;\n",
+ " var y = canvas_pos.y * mpl.ratio;\n",
+ "\n",
+ " this.send_message(name, {x: x, y: y, button: event.button,\n",
+ " step: event.step,\n",
+ " guiEvent: simpleKeys(event)});\n",
+ "\n",
+ " /* This prevents the web browser from automatically changing to\n",
+ " * the text insertion cursor when the button is pressed. We want\n",
+ " * to control all of the cursor setting manually through the\n",
+ " * 'cursor' event from matplotlib */\n",
+ " event.preventDefault();\n",
+ " return false;\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
+ " // Handle any extra behaviour associated with a key event\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.key_event = function(event, name) {\n",
+ "\n",
+ " // Prevent repeat events\n",
+ " if (name == 'key_press')\n",
+ " {\n",
+ " if (event.which === this._key)\n",
+ " return;\n",
+ " else\n",
+ " this._key = event.which;\n",
+ " }\n",
+ " if (name == 'key_release')\n",
+ " this._key = null;\n",
+ "\n",
+ " var value = '';\n",
+ " if (event.ctrlKey && event.which != 17)\n",
+ " value += \"ctrl+\";\n",
+ " if (event.altKey && event.which != 18)\n",
+ " value += \"alt+\";\n",
+ " if (event.shiftKey && event.which != 16)\n",
+ " value += \"shift+\";\n",
+ "\n",
+ " value += 'k';\n",
+ " value += event.which.toString();\n",
+ "\n",
+ " this._key_event_extra(event, name);\n",
+ "\n",
+ " this.send_message(name, {key: value,\n",
+ " guiEvent: simpleKeys(event)});\n",
+ " return false;\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
+ " if (name == 'download') {\n",
+ " this.handle_save(this, null);\n",
+ " } else {\n",
+ " this.send_message(\"toolbar_button\", {name: name});\n",
+ " }\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
+ " this.message.textContent = tooltip;\n",
+ "};\n",
+ "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
+ "\n",
+ "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
+ "\n",
+ "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
+ " // Create a \"websocket\"-like object which calls the given IPython comm\n",
+ " // object with the appropriate methods. Currently this is a non binary\n",
+ " // socket, so there is still some room for performance tuning.\n",
+ " var ws = {};\n",
+ "\n",
+ " ws.close = function() {\n",
+ " comm.close()\n",
+ " };\n",
+ " ws.send = function(m) {\n",
+ " //console.log('sending', m);\n",
+ " comm.send(m);\n",
+ " };\n",
+ " // Register the callback with on_msg.\n",
+ " comm.on_msg(function(msg) {\n",
+ " //console.log('receiving', msg['content']['data'], msg);\n",
+ " // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
+ " ws.onmessage(msg['content']['data'])\n",
+ " });\n",
+ " return ws;\n",
+ "}\n",
+ "\n",
+ "mpl.mpl_figure_comm = function(comm, msg) {\n",
+ " // This is the function which gets called when the mpl process\n",
+ " // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
+ "\n",
+ " var id = msg.content.data.id;\n",
+ " // Get hold of the div created by the display call when the Comm\n",
+ " // socket was opened in Python.\n",
+ " var element = $(\"#\" + id);\n",
+ " var ws_proxy = comm_websocket_adapter(comm)\n",
+ "\n",
+ " function ondownload(figure, format) {\n",
+ " window.open(figure.imageObj.src);\n",
+ " }\n",
+ "\n",
+ " var fig = new mpl.figure(id, ws_proxy,\n",
+ " ondownload,\n",
+ " element.get(0));\n",
+ "\n",
+ " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
+ " // web socket which is closed, not our websocket->open comm proxy.\n",
+ " ws_proxy.onopen();\n",
+ "\n",
+ " fig.parent_element = element.get(0);\n",
+ " fig.cell_info = mpl.find_output_cell(\"\");\n",
+ " if (!fig.cell_info) {\n",
+ " console.error(\"Failed to find cell for figure\", id, fig);\n",
+ " return;\n",
+ " }\n",
+ "\n",
+ " var output_index = fig.cell_info[2]\n",
+ " var cell = fig.cell_info[0];\n",
+ "\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
+ " var width = fig.canvas.width/mpl.ratio\n",
+ " fig.root.unbind('remove')\n",
+ "\n",
+ " // Update the output cell to use the data from the current canvas.\n",
+ " fig.push_to_output();\n",
+ " var dataURL = fig.canvas.toDataURL();\n",
+ " // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
+ " // the notebook keyboard shortcuts fail.\n",
+ " IPython.keyboard_manager.enable()\n",
+ " $(fig.parent_element).html('');\n",
+ " fig.close_ws(fig, msg);\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.close_ws = function(fig, msg){\n",
+ " fig.send_message('closing', msg);\n",
+ " // fig.ws.close()\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
+ " // Turn the data on the canvas into data in the output cell.\n",
+ " var width = this.canvas.width/mpl.ratio\n",
+ " var dataURL = this.canvas.toDataURL();\n",
+ " this.cell_info[1]['text/html'] = '';\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.updated_canvas_event = function() {\n",
+ " // Tell IPython that the notebook contents must change.\n",
+ " IPython.notebook.set_dirty(true);\n",
+ " this.send_message(\"ack\", {});\n",
+ " var fig = this;\n",
+ " // Wait a second, then push the new image to the DOM so\n",
+ " // that it is saved nicely (might be nice to debounce this).\n",
+ " setTimeout(function () { fig.push_to_output() }, 1000);\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype._init_toolbar = function() {\n",
+ " var fig = this;\n",
+ "\n",
+ " var nav_element = $('')\n",
+ " nav_element.attr('style', 'width: 100%');\n",
+ " this.root.append(nav_element);\n",
+ "\n",
+ " // Define a callback function for later on.\n",
+ " function toolbar_event(event) {\n",
+ " return fig.toolbar_button_onclick(event['data']);\n",
+ " }\n",
+ " function toolbar_mouse_event(event) {\n",
+ " return fig.toolbar_button_onmouseover(event['data']);\n",
+ " }\n",
+ "\n",
+ " for(var toolbar_ind in mpl.toolbar_items){\n",
+ " var name = mpl.toolbar_items[toolbar_ind][0];\n",
+ " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
+ " var image = mpl.toolbar_items[toolbar_ind][2];\n",
+ " var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
+ "\n",
+ " if (!name) { continue; };\n",
+ "\n",
+ " var button = $('');\n",
+ " button.click(method_name, toolbar_event);\n",
+ " button.mouseover(tooltip, toolbar_mouse_event);\n",
+ " nav_element.append(button);\n",
+ " }\n",
+ "\n",
+ " // Add the status bar.\n",
+ " var status_bar = $('');\n",
+ " nav_element.append(status_bar);\n",
+ " this.message = status_bar[0];\n",
+ "\n",
+ " // Add the close button to the window.\n",
+ " var buttongrp = $('');\n",
+ " var button = $('');\n",
+ " button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
+ " button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
+ " buttongrp.append(button);\n",
+ " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
+ " titlebar.prepend(buttongrp);\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype._root_extra_style = function(el){\n",
+ " var fig = this\n",
+ " el.on(\"remove\", function(){\n",
+ "\tfig.close_ws(fig, {});\n",
+ " });\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype._canvas_extra_style = function(el){\n",
+ " // this is important to make the div 'focusable\n",
+ " el.attr('tabindex', 0)\n",
+ " // reach out to IPython and tell the keyboard manager to turn it's self\n",
+ " // off when our div gets focus\n",
+ "\n",
+ " // location in version 3\n",
+ " if (IPython.notebook.keyboard_manager) {\n",
+ " IPython.notebook.keyboard_manager.register_events(el);\n",
+ " }\n",
+ " else {\n",
+ " // location in version 2\n",
+ " IPython.keyboard_manager.register_events(el);\n",
+ " }\n",
+ "\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
+ " var manager = IPython.notebook.keyboard_manager;\n",
+ " if (!manager)\n",
+ " manager = IPython.keyboard_manager;\n",
+ "\n",
+ " // Check for shift+enter\n",
+ " if (event.shiftKey && event.which == 13) {\n",
+ " this.canvas_div.blur();\n",
+ " event.shiftKey = false;\n",
+ " // Send a \"J\" for go to next cell\n",
+ " event.which = 74;\n",
+ " event.keyCode = 74;\n",
+ " manager.command_mode();\n",
+ " manager.handle_keydown(event);\n",
+ " }\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
+ " fig.ondownload(fig, null);\n",
+ "}\n",
+ "\n",
+ "\n",
+ "mpl.find_output_cell = function(html_output) {\n",
+ " // Return the cell and output element which can be found *uniquely* in the notebook.\n",
+ " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
+ " // IPython event is triggered only after the cells have been serialised, which for\n",
+ " // our purposes (turning an active figure into a static one), is too late.\n",
+ " var cells = IPython.notebook.get_cells();\n",
+ " var ncells = cells.length;\n",
+ " for (var i=0; i= 3 moved mimebundle to data attribute of output\n",
+ " data = data.data;\n",
+ " }\n",
+ " if (data['text/html'] == html_output) {\n",
+ " return [cell, data, j];\n",
+ " }\n",
+ " }\n",
+ " }\n",
+ " }\n",
+ "}\n",
+ "\n",
+ "// Register the function which deals with the matplotlib target/channel.\n",
+ "// The kernel may be null if the page has been refreshed.\n",
+ "if (IPython.notebook.kernel != null) {\n",
+ " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
+ "}\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "%matplotlib nbagg\n",
+ "\n",
+ "import matplotlib.pyplot as plt\n",
+ "import matplotlib.animation as animation\n",
+ "\n",
+ "n_epoch = 3000 # epoch size\n",
+ "a, b = 1, 1 # initial parameters\n",
+ "epsilon = 0.001 # learning rate\n",
+ "\n",
+ "fig = plt.figure()\n",
+ "imgs = []\n",
+ "\n",
+ "for i in range(n_epoch):\n",
+ " for j in range(N):\n",
+ " a = a + epsilon*2*(Y[j] - a*X[j] - b)*X[j]\n",
+ " b = b + epsilon*2*(Y[j] - a*X[j] - b)\n",
+ "\n",
+ " L = 0\n",
+ " for j in range(N):\n",
+ " L = L + (Y[j]-a*X[j]-b)**2\n",
+ " #print(\"epoch %4d: loss = %f, a = %f, b = %f\" % (i, L, a, b))\n",
+ " \n",
+ " if i % 50 == 0:\n",
+ " x_min = np.min(X)\n",
+ " x_max = np.max(X)\n",
+ " y_min = a * x_min + b\n",
+ " y_max = a * x_max + b\n",
+ "\n",
+ " img = plt.scatter(X, Y, label='original data')\n",
+ " img = plt.plot([x_min, x_max], [y_min, y_max], 'r', label='model')\n",
+ " imgs.append(img)\n",
+ " \n",
+ "ani = animation.ArtistAnimation(fig, imgs)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## How to use batch update method?\n",
+ "\n",
+ "If some data is outliear, then the "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
"## How to fit polynomial function?\n",
"\n",
"If we observe a missle at some time, then how to estimate the trajectory? Acoording the physical theory, the trajectory can be formulated as:\n",
@@ -172,7 +4110,7 @@
},
{
"cell_type": "code",
- "execution_count": 45,
+ "execution_count": 4,
"metadata": {},
"outputs": [
{
@@ -213,7 +4151,7 @@
},
{
"cell_type": "code",
- "execution_count": 36,
+ "execution_count": 5,
"metadata": {},
"outputs": [
{
@@ -271,7 +4209,7 @@
},
{
"cell_type": "code",
- "execution_count": 42,
+ "execution_count": 6,
"metadata": {},
"outputs": [
{
@@ -280,7 +4218,7 @@
"array([800., 90., -20.])"
]
},
- "execution_count": 42,
+ "execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
@@ -315,8 +4253,10 @@
},
{
"cell_type": "code",
- "execution_count": 67,
- "metadata": {},
+ "execution_count": 9,
+ "metadata": {
+ "lines_to_next_cell": 0
+ },
"outputs": [
{
"name": "stdout",
@@ -335,7 +4275,7 @@
" 136. 261. 113. 131. 174. 257. 55. 84. 42. 146. 212. 233. 91. 111.\n",
" 152. 120. 67. 310. 94. 183. 66. 173. 72. 49. 64. 48. 178. 104.\n",
" 132. 220. 57.]\n",
- "err = 8.437628, score = 0.422889\n",
+ "err = 8.437628 (56.601327), score = 0.422889\n",
"a = 953.024850, b = 152.544562\n"
]
},
@@ -374,8 +4314,9 @@
"print(\"Y_est = \", Y_est)\n",
"print(\"Y_test = \", Y_test)\n",
"err = (Y_est - Y_test)**2\n",
+ "err2 = sklearn.metrics.mean_squared_error(Y_test, Y_est)\n",
"score = regr.score(X_test, Y_test)\n",
- "print(\"err = %f, score = %f\" % (np.sqrt(np.sum(err))/N_test, score))\n",
+ "print(\"err = %f (%f), score = %f\" % (np.sqrt(np.sum(err))/N_test, np.sqrt(err2), score))\n",
"\n",
"\n",
"# plot data\n",
@@ -398,7 +4339,9 @@
{
"cell_type": "code",
"execution_count": null,
- "metadata": {},
+ "metadata": {
+ "lines_to_next_cell": 2
+ },
"outputs": [],
"source": []
}
diff --git a/1_logistic_regression/Least_squares.py b/1_logistic_regression/Least_squares.py
index 70bb2fb..3a7c63c 100644
--- a/1_logistic_regression/Least_squares.py
+++ b/1_logistic_regression/Least_squares.py
@@ -113,6 +113,78 @@ plt.legend()
plt.show()
# -
+# ## How to use iterative method to estimate parameters?
+#
+
+# +
+n_epoch = 3000 # epoch size
+a, b = 1, 1 # initial parameters
+epsilon = 0.001 # learning rate
+
+for i in range(n_epoch):
+ for j in range(N):
+ a = a + epsilon*2*(Y[j] - a*X[j] - b)*X[j]
+ b = b + epsilon*2*(Y[j] - a*X[j] - b)
+
+ L = 0
+ for j in range(N):
+ L = L + (Y[j]-a*X[j]-b)**2
+ print("epoch %4d: loss = %f, a = %f, b = %f" % (i, L, a, b))
+
+x_min = np.min(X)
+x_max = np.max(X)
+y_min = a * x_min + b
+y_max = a * x_max + b
+
+plt.scatter(X, Y, label='original data')
+plt.plot([x_min, x_max], [y_min, y_max], 'r', label='model')
+plt.legend()
+plt.show()
+# -
+
+# ## How to show the iterative process
+
+# +
+# %matplotlib nbagg
+
+import matplotlib.pyplot as plt
+import matplotlib.animation as animation
+
+n_epoch = 3000 # epoch size
+a, b = 1, 1 # initial parameters
+epsilon = 0.001 # learning rate
+
+fig = plt.figure()
+imgs = []
+
+for i in range(n_epoch):
+ for j in range(N):
+ a = a + epsilon*2*(Y[j] - a*X[j] - b)*X[j]
+ b = b + epsilon*2*(Y[j] - a*X[j] - b)
+
+ L = 0
+ for j in range(N):
+ L = L + (Y[j]-a*X[j]-b)**2
+ #print("epoch %4d: loss = %f, a = %f, b = %f" % (i, L, a, b))
+
+ if i % 50 == 0:
+ x_min = np.min(X)
+ x_max = np.max(X)
+ y_min = a * x_min + b
+ y_max = a * x_max + b
+
+ img = plt.scatter(X, Y, label='original data')
+ img = plt.plot([x_min, x_max], [y_min, y_max], 'r', label='model')
+ imgs.append(img)
+
+ani = animation.ArtistAnimation(fig, imgs)
+plt.show()
+# -
+
+# ## How to use batch update method?
+#
+# If some data is outliear, then the
+
# ## How to fit polynomial function?
#
# If we observe a missle at some time, then how to estimate the trajectory? Acoording the physical theory, the trajectory can be formulated as:
@@ -217,8 +289,9 @@ Y_est = regr.predict(X_test)
print("Y_est = ", Y_est)
print("Y_test = ", Y_test)
err = (Y_est - Y_test)**2
+err2 = sklearn.metrics.mean_squared_error(Y_test, Y_est)
score = regr.score(X_test, Y_test)
-print("err = %f, score = %f" % (np.sqrt(np.sum(err))/N_test, score))
+print("err = %f (%f), score = %f" % (np.sqrt(np.sum(err))/N_test, np.sqrt(err2), score))
# plot data
diff --git a/1_logistic_regression/Logistic_regression.ipynb b/1_logistic_regression/Logistic_regression.ipynb
index 93358de..2e6c35f 100644
--- a/1_logistic_regression/Logistic_regression.ipynb
+++ b/1_logistic_regression/Logistic_regression.ipynb
@@ -5,12 +5,28 @@
"metadata": {},
"source": [
"# Logistic Regression\n",
+ "\n",
+ "逻辑回归(Logistic Regression, LR)模型其实仅在线性回归的基础上,套用了一个逻辑函数,但也就由于这个逻辑函数,使得逻辑回归模型成为了机器学习领域一颗耀眼的明星,更是计算广告学的核心。本节主要详述逻辑回归模型的基础。\n",
+ "\n",
+ "\n",
+ "## 1 逻辑回归模型\n",
+ "回归是一种比较容易理解的模型,就相当于$y=f(x)$,表明自变量$x$与因变量$y$的关系。最常见问题有如医生治病时的望、闻、问、切,之后判定病人是否生病或生了什么病,其中的望闻问切就是获取自变量$x$,即特征数据,判断是否生病就相当于获取因变量$y$,即预测分类。\n",
+ "\n",
+ "最简单的回归是线性回归,在此借用Andrew NG的讲义,有如图所示,$X$为数据点——肿瘤的大小,$Y$为观测值——是否是恶性肿瘤。通过构建线性回归模型,如$h_\\theta(x)$所示,构建线性回归模型后,即可以根据肿瘤大小,预测是否为恶性肿瘤$h_\\theta(x)) \\ge 0.5$为恶性,$h_\\theta(x) \\lt 0.5$为良性。\n",
+ "\n",
+ "\n",
+ "\n",
+ "然而线性回归的鲁棒性很差,例如在上图的数据集上建立回归,因最右边噪点的存在,使回归模型在训练集上表现都很差。这主要是由于线性回归在整个实数域内敏感度一致,而分类范围,需要在$[0,1]$。\n",
+ "\n",
+ "逻辑回归就是一种减小预测范围,将预测值限定为$[0,1]$间的一种回归模型,其回归方程与回归曲线如图2所示。逻辑曲线在$z=0$时,十分敏感,在$z>>0$或$z<<0$处,都不敏感,将预测值限定为$(0,1)$。\n",
+ "\n",
+ "\n",
"\n"
]
},
{
"cell_type": "code",
- "execution_count": 23,
+ "execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
@@ -171,6 +187,16 @@
"logistic.train(200)\n",
"plot_decision_boundary(lambda x: logistic.predict(x), data, label)"
]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## References\n",
+ "\n",
+ "* [逻辑回归模型(Logistic Regression, LR)基础](https://www.cnblogs.com/sparkwen/p/3441197.html)\n",
+ "* [逻辑回归(Logistic Regression)](http://www.cnblogs.com/BYRans/p/4713624.html)"
+ ]
}
],
"metadata": {
diff --git a/1_logistic_regression/Logistic_regression.py b/1_logistic_regression/Logistic_regression.py
new file mode 100644
index 0000000..eabdefb
--- /dev/null
+++ b/1_logistic_regression/Logistic_regression.py
@@ -0,0 +1,132 @@
+# -*- coding: utf-8 -*-
+# ---
+# jupyter:
+# jupytext_format_version: '1.2'
+# kernelspec:
+# display_name: Python 3
+# 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.5.2
+# ---
+
+# # Logistic Regression
+#
+# 逻辑回归(Logistic Regression, LR)模型其实仅在线性回归的基础上,套用了一个逻辑函数,但也就由于这个逻辑函数,使得逻辑回归模型成为了机器学习领域一颗耀眼的明星,更是计算广告学的核心。本节主要详述逻辑回归模型的基础。
+#
+#
+# ## 1 逻辑回归模型
+# 回归是一种比较容易理解的模型,就相当于$y=f(x)$,表明自变量$x$与因变量$y$的关系。最常见问题有如医生治病时的望、闻、问、切,之后判定病人是否生病或生了什么病,其中的望闻问切就是获取自变量$x$,即特征数据,判断是否生病就相当于获取因变量$y$,即预测分类。
+#
+# 最简单的回归是线性回归,在此借用Andrew NG的讲义,有如图所示,$X$为数据点——肿瘤的大小,$Y$为观测值——是否是恶性肿瘤。通过构建线性回归模型,如$h_\theta(x)$所示,构建线性回归模型后,即可以根据肿瘤大小,预测是否为恶性肿瘤$h_\theta(x)) \ge 0.5$为恶性,$h_\theta(x) \lt 0.5$为良性。
+#
+# 
+#
+# 然而线性回归的鲁棒性很差,例如在上图的数据集上建立回归,因最右边噪点的存在,使回归模型在训练集上表现都很差。这主要是由于线性回归在整个实数域内敏感度一致,而分类范围,需要在$[0,1]$。
+#
+# 逻辑回归就是一种减小预测范围,将预测值限定为$[0,1]$间的一种回归模型,其回归方程与回归曲线如图2所示。逻辑曲线在$z=0$时,十分敏感,在$z>>0$或$z<<0$处,都不敏感,将预测值限定为$(0,1)$。
+#
+# 
+#
+#
+
+# +
+# %matplotlib inline
+
+from __future__ import division
+import numpy as np
+import sklearn.datasets
+import matplotlib.pyplot as plt
+
+np.random.seed(0)
+
+
+# +
+# load sample data
+data, label = sklearn.datasets.make_moons(200, noise=0.30)
+
+print("data = ", data[:10, :])
+print("label = ", label[:10])
+
+plt.scatter(data[:,0], data[:,1], c=label)
+plt.title("Original Data")
+
+# +
+def plot_decision_boundary(predict_func, data, label):
+ """画出结果图
+ Args:
+ pred_func (callable): 预测函数
+ data (numpy.ndarray): 训练数据集合
+ label (numpy.ndarray): 训练数据标签
+ """
+ x_min, x_max = data[:, 0].min() - .5, data[:, 0].max() + .5
+ y_min, y_max = data[:, 1].min() - .5, data[:, 1].max() + .5
+ h = 0.01
+
+ xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
+
+ Z = predict_func(np.c_[xx.ravel(), yy.ravel()])
+ Z = Z.reshape(xx.shape)
+
+ plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral)
+ plt.scatter(data[:, 0], data[:, 1], c=label, cmap=plt.cm.Spectral)
+ plt.show()
+
+
+
+# +
+def sigmoid(x):
+ return 1.0 / (1 + np.exp(-x))
+
+class Logistic(object):
+ """logistic回归模型"""
+ def __init__(self, data, label):
+ self.data = data
+ self.label = label
+
+ self.data_num, n = np.shape(data)
+ self.weights = np.ones(n)
+ self.b = 1
+
+ def train(self, num_iteration=150):
+ """随机梯度上升算法
+ Args:
+ data (numpy.ndarray): 训练数据集
+ labels (numpy.ndarray): 训练标签
+ num_iteration (int): 迭代次数
+ """
+ for j in range(num_iteration):
+ data_index = list(range(self.data_num))
+ for i in range(self.data_num):
+ # 学习速率
+ alpha = 0.01
+ rand_index = int(np.random.uniform(0, len(data_index)))
+ error = self.label[rand_index] - sigmoid(sum(self.data[rand_index] * self.weights + self.b))
+ self.weights += alpha * error * self.data[rand_index]
+ self.b += alpha * error
+ del(data_index[rand_index])
+
+ def predict(self, predict_data):
+ """预测函数"""
+ result = list(map(lambda x: 1 if sum(self.weights * x + self.b) > 0 else 0,
+ predict_data))
+ return np.array(result)
+
+# -
+
+logistic = Logistic(data, label)
+logistic.train(200)
+plot_decision_boundary(lambda x: logistic.predict(x), data, label)
+
+# ## References
+#
+# * [逻辑回归模型(Logistic Regression, LR)基础](https://www.cnblogs.com/sparkwen/p/3441197.html)
+# * [逻辑回归(Logistic Regression)](http://www.cnblogs.com/BYRans/p/4713624.html)
diff --git a/1_logistic_regression/images/fig1.gif b/1_logistic_regression/images/fig1.gif
new file mode 100644
index 0000000..e321cd9
Binary files /dev/null and b/1_logistic_regression/images/fig1.gif differ
diff --git a/1_logistic_regression/images/fig2.gif b/1_logistic_regression/images/fig2.gif
new file mode 100644
index 0000000..ccaf0f7
Binary files /dev/null and b/1_logistic_regression/images/fig2.gif differ
diff --git a/1_logistic_regression/images/fig3.gif b/1_logistic_regression/images/fig3.gif
new file mode 100644
index 0000000..76c4188
Binary files /dev/null and b/1_logistic_regression/images/fig3.gif differ
diff --git a/1_logistic_regression/linear models.ipynb b/1_logistic_regression/linear models.ipynb
deleted file mode 100644
index e381978..0000000
--- a/1_logistic_regression/linear models.ipynb
+++ /dev/null
@@ -1,149 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Linear Models\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "This example uses the only the first feature of the diabetes dataset, in order to illustrate a two-dimensional plot of this regression technique. The straight line can be seen in the plot, showing how linear regression attempts to draw a straight line that will best minimize the residual sum of squares between the observed responses in the dataset, and the responses predicted by the linear approximation.\n",
- "\n",
- "The coefficients, the residual sum of squares and the variance score are also calculated.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "%matplotlib inline\n",
- "\n",
- "import matplotlib.pyplot as plt\n",
- "import numpy as np\n",
- "from sklearn import datasets, linear_model\n",
- "from sklearn.metrics import mean_squared_error, r2_score\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Load the diabetes dataset\n",
- "diabetes = datasets.load_diabetes()\n",
- "\n",
- "# Use only one feature\n",
- "diabetes_X = diabetes.data[:, np.newaxis, 2]\n",
- "\n",
- "# Split the data into training/testing sets\n",
- "diabetes_X_train = diabetes_X[:-20]\n",
- "diabetes_X_test = diabetes_X[-20:]\n",
- "\n",
- "# Split the targets into training/testing sets\n",
- "diabetes_y_train = diabetes.target[:-20]\n",
- "diabetes_y_test = diabetes.target[-20:]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Coefficients: \n",
- " [938.23786125]\n",
- "Mean squared error: 2548.07\n",
- "Variance score: 0.47\n"
- ]
- }
- ],
- "source": [
- "# Create linear regression object\n",
- "regr = linear_model.LinearRegression()\n",
- "\n",
- "# Train the model using the training sets\n",
- "regr.fit(diabetes_X_train, diabetes_y_train)\n",
- "\n",
- "# Make predictions using the testing set\n",
- "diabetes_y_pred = regr.predict(diabetes_X_test)\n",
- "\n",
- "# The coefficients\n",
- "print('Coefficients: \\n', regr.coef_)\n",
- "\n",
- "# The mean squared error\n",
- "print(\"Mean squared error: %.2f\"\n",
- " % mean_squared_error(diabetes_y_test, diabetes_y_pred))\n",
- "\n",
- "# Explained variance score: 1 is perfect prediction\n",
- "print('Variance score: %.2f' % r2_score(diabetes_y_test, diabetes_y_pred))\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# Plot outputs\n",
- "plt.scatter(diabetes_X_test, diabetes_y_test, color='black')\n",
- "plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3)\n",
- "\n",
- "plt.xticks(())\n",
- "plt.yticks(())\n",
- "\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## References\n",
- "* [Generalized Linear Models](http://scikit-learn.org/stable/modules/linear_model.html)\n",
- "* [Linear Regression Example](http://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "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.5.2"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/1_logistic_regression/linear_regression.py b/1_logistic_regression/linear_regression.py
deleted file mode 100644
index 5fd5d7d..0000000
--- a/1_logistic_regression/linear_regression.py
+++ /dev/null
@@ -1,66 +0,0 @@
-
-import matplotlib.pyplot as plt
-import numpy as np
-import sklearn
-from sklearn import datasets
-
-# load data
-d = datasets.load_diabetes()
-
-X = d.data[:, 2]
-Y = d.target
-
-# draw original data
-plt.scatter(X, Y)
-plt.show()
-
-
-###############################################################################
-# Least squares
-###############################################################################
-
-# L = \sum_{i=1, N} (y_i - a*x_i - b)^2
-N = X.shape[0]
-
-S_X2 = np.sum(X*X)
-S_X = np.sum(X)
-S_XY = np.sum(X*Y)
-S_Y = np.sum(Y)
-
-A1 = np.array([[S_X2, S_X], [S_X, N]])
-B1 = np.array([S_XY, S_Y])
-
-coeff = np.linalg.inv(A1).dot(B1)
-
-x_min = np.min(X)
-x_max = np.max(X)
-y_min = coeff[0] * x_min + coeff[1]
-y_max = coeff[0] * x_max + coeff[1]
-
-plt.scatter(X, Y)
-plt.plot([x_min, x_max], [y_min, y_max], 'r')
-plt.show()
-
-
-###############################################################################
-# Linear regression
-###############################################################################
-# the loss function
-# L = \sum_{i=1, N} (y_i - a*x_i - b)^2
-
-n_train = 1000
-
-
-a, b = 1, 1
-epsilon = 0.001
-
-for i in range(n_train):
- for j in range(N):
- a = a + epsilon*2*(Y[j] - a*X[j] - b)*X[j]
- b = b + epsilon*2*(Y[j] - a*X[j] - b)
-
- L = 0
- for j in range(N):
- L = L + (Y[j]-a*X[j]-b)**2
- print("epoch %4d: loss = %f" % (i, L))
-
diff --git a/1_logistic_regression/logistic3.py b/1_logistic_regression/logistic3.py
deleted file mode 100644
index 9e724b0..0000000
--- a/1_logistic_regression/logistic3.py
+++ /dev/null
@@ -1,70 +0,0 @@
-# -*- coding=utf8 -*-
-from __future__ import division
-import numpy as np
-import sklearn.datasets
-import matplotlib.pyplot as plt
-
-np.random.seed(0)
-data, label = sklearn.datasets.make_moons(200, noise=0.30)
-
-def plot_decision_boundary(predict_func, data, label):
- """画出结果图
- Args:
- pred_func (callable): 预测函数
- data (numpy.ndarray): 训练数据集合
- label (numpy.ndarray): 训练数据标签
- """
- x_min, x_max = data[:, 0].min() - .5, data[:, 0].max() + .5
- y_min, y_max = data[:, 1].min() - .5, data[:, 1].max() + .5
- h = 0.01
-
- xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
-
- Z = predict_func(np.c_[xx.ravel(), yy.ravel()])
- Z = Z.reshape(xx.shape)
-
- plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral)
- plt.scatter(data[:, 0], data[:, 1], c=label, cmap=plt.cm.Spectral)
- plt.show()
-
-def sigmoid(x):
- return 1.0 / (1 + np.exp(-x))
-
-class Logistic(object):
- """logistic回归模型"""
- def __init__(self, data, label):
- self.data = data
- self.label = label
-
- self.data_num, n = np.shape(data)
- self.weights = np.ones(n)
- self.b = 1
-
- def train(self, num_iteration=150):
- """随机梯度上升算法
- Args:
- data (numpy.ndarray): 训练数据集
- labels (numpy.ndarray): 训练标签
- num_iteration (int): 迭代次数
- """
- for j in range(num_iteration):
- data_index = list(range(self.data_num))
- for i in range(self.data_num):
- # 学习速率
- alpha = 0.01
- rand_index = int(np.random.uniform(0, len(data_index)))
- error = self.label[rand_index] - sigmoid(sum(self.data[rand_index] * self.weights + self.b))
- self.weights += alpha * error * self.data[rand_index]
- self.b += alpha * error
- del(data_index[rand_index])
-
- def predict(self, predict_data):
- """预测函数"""
- result = list(map(lambda x: 1 if sum(self.weights * x + self.b) > 0 else 0,
- predict_data))
- return np.array(result)
-
-if __name__ == '__main__':
- logistic = Logistic(data, label)
- logistic.train(200)
-plot_decision_boundary(lambda x: logistic.predict(x), data, label)
diff --git a/1_logistic_regression/logistic_demo.py b/1_logistic_regression/logistic_demo.py
deleted file mode 100644
index 139ea20..0000000
--- a/1_logistic_regression/logistic_demo.py
+++ /dev/null
@@ -1,72 +0,0 @@
-# -*- coding=utf8 -*-
-from __future__ import division
-import numpy as np
-import sklearn.datasets
-import matplotlib.pyplot as plt
-
-np.random.seed(0)
-data, label = sklearn.datasets.make_moons(200, noise=0.30)
-
-def plot_decision_boundary(predict_func, data, label):
- """画出结果图
- Args:
- pred_func (callable): 预测函数
- data (numpy.ndarray): 训练数据集合
- label (numpy.ndarray): 训练数据标签
- """
- x_min, x_max = data[:, 0].min() - .5, data[:, 0].max() + .5
- y_min, y_max = data[:, 1].min() - .5, data[:, 1].max() + .5
- h = 0.01
-
- xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
-
- Z = predict_func(np.c_[xx.ravel(), yy.ravel()])
- print(Z.shape)
- Z = Z.reshape(xx.shape)
-
- plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral)
- plt.scatter(data[:, 0], data[:, 1], c=label, cmap=plt.cm.Spectral)
- plt.show()
-
-def sigmoid(x):
- return 1.0 / (1 + np.exp(-x))
-
-class Logistic(object):
- """logistic回归模型"""
- def __init__(self, data, label):
- self.data = data
- self.label = label
-
- self.data_num, n = np.shape(data)
- self.weights = np.ones(n)
- self.b = 1
-
- def train(self, num_iteration=150):
- """随机梯度上升算法
- Args:
- data (numpy.ndarray): 训练数据集
- labels (numpy.ndarray): 训练标签
- num_iteration (int): 迭代次数
- """
- for j in range(num_iteration):
- data_index = range(self.data_num)
- for i in range(self.data_num):
- # 学习速率
- alpha = 0.01
- rand_index = int(np.random.uniform(0, len(data_index)))
- error = self.label[rand_index] - sigmoid(sum(self.data[rand_index] * self.weights + self.b))
- self.weights += alpha * error * self.data[rand_index]
- self.b += alpha * error
-
-
- def predict(self, predict_data):
- """预测函数"""
- result = map(lambda x: 1 if sum(self.weights * x + self.b) > 0 else 0,
- predict_data)
- print(result)
- return np.array(result)
-
-if __name__ == '__main__':
- logistic = Logistic(data, label)
- logistic.train(200)
- plot_decision_boundary(lambda x: logistic.predict(x), data, label)