這次我將修改前次的生成對抗網路,希望能夠調整為一個自動生成樣本的神經網路。我這次將使用以前曾經使用過的CRE Bacteria data(https://hermitlin.netlify.com/post/2019/04/24/cre-bacteria-data-analysis/ )。 我先建立一個簡單的分類模型,一將使用p_value前五個維度當作解釋變數,先建立一個簡單的分類模型,並將第一類的46個當作樣本輸入至生成對抗網路,調整訓練參數,且試圖讓神經網路能夠產生第一類別的資料。最後,經由生成器生成的資料我將匯入原先的分類模型,觀察是否能產生類似於第一類別的資料,並最終計算其生成準確率。
匯入原始資料
原始資料有95筆 * 1462維資料,並且以是否為CRE細菌作為二元分類依據,我們先將資料切至95 * 50的大小並建立一簡易二元分類模型。
import pandas as pd
import numpy as np
data = pd.read_csv('C:/Users/User/OneDrive - student.nsysu.edu.tw/Educations/NSYSU/fu_chung/bacterial/123.csv')
data.head()
data_50 = data.iloc[:,0:50]
cre = data.loc[:, ['CRE']]
cre = pd.concat([data_50,cre],axis = 1,join = 'outer')
data1 = data[0:46]
data11 = data.iloc[0:46,0:50]
data2 = data[46:96]
cre
| V1 | V2 | V3 | V4 | V5 | V6 | V7 | V8 | V9 | V10 | … | V42 | V43 | V44 | V45 | V46 | V47 | V48 | V49 | V50 | CRE | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 251357.70 | 0.00 | 494285.53 | 114879.43 | 31439.26 | 0.00 | 94049.75 | 0.00 | 0.00 | 0.00 | … | 85986.77 | 0.00 | 54979.47 | 0.00 | 278172.31 | 65956.08 | 0.00 | 0.00 | 0.00 | 1 |
| 1 | 394550.19 | 65408.65 | 2186094.75 | 137296.91 | 0.00 | 401122.91 | 350882.59 | 0.00 | 0.00 | 0.00 | … | 645223.63 | 486622.78 | 0.00 | 0.00 | 159735.28 | 0.00 | 1143224.25 | 0.00 | 13108.50 | 1 |
| 2 | 0.00 | 129236.21 | 675608.81 | 182865.20 | 16074.49 | 0.00 | 0.00 | 49122.42 | 0.00 | 0.00 | … | 0.00 | 0.00 | 0.00 | 0.00 | 259147.75 | 130750.07 | 0.00 | 0.00 | 11471.32 | 1 |
| 3 | 137403.30 | 0.00 | 818021.25 | 0.00 | 0.00 | 0.00 | 0.00 | 24273.09 | 0.00 | 0.00 | … | 0.00 | 0.00 | 14327.79 | 0.00 | 0.00 | 113117.47 | 0.00 | 0.00 | 0.00 | 1 |
| 4 | 377358.78 | 327564.66 | 532502.63 | 0.00 | 0.00 | 913255.00 | 0.00 | 0.00 | 0.00 | 0.00 | … | 48186.92 | 241815.84 | 0.00 | 356398.22 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 1 |
| 5 | 321700.28 | 300239.31 | 220649.50 | 289622.50 | 42589.68 | 896569.38 | 26930.33 | 130587.49 | 0.00 | 0.00 | … | 74352.74 | 161985.64 | 0.00 | 0.00 | 10547.48 | 0.00 | 596415.63 | 0.00 | 0.00 | 1 |
| 6 | 122302.27 | 163517.28 | 143966.83 | 197685.97 | 44586.54 | 665813.19 | 68359.62 | 86041.64 | 0.00 | 0.00 | … | 28788.66 | 82527.43 | 0.00 | 0.00 | 0.00 | 277068.66 | 531947.25 | 0.00 | 0.00 | 1 |
| 7 | 458382.13 | 136389.20 | 412460.16 | 294669.03 | 46850.84 | 470360.91 | 70784.13 | 52197.92 | 0.00 | 0.00 | … | 148098.28 | 269423.69 | 0.00 | 0.00 | 396628.63 | 153470.94 | 0.00 | 0.00 | 59923.06 | 1 |
| 8 | 404748.19 | 97165.77 | 800137.44 | 134355.13 | 0.00 | 285973.69 | 152992.25 | 0.00 | 0.00 | 0.00 | … | 244165.31 | 424717.97 | 0.00 | 0.00 | 227433.22 | 50524.48 | 727185.63 | 0.00 | 81509.76 | 1 |
| 9 | 0.00 | 237456.30 | 489450.28 | 317787.66 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | … | 0.00 | 374539.31 | 0.00 | 0.00 | 364267.56 | 0.00 | 0.00 | 0.00 | 66223.03 | 1 |
| 10 | 0.00 | 60298.57 | 242256.88 | 0.00 | 0.00 | 0.00 | 28529.95 | 0.00 | 577876.63 | 0.00 | … | 0.00 | 38658.57 | 0.00 | 224369.88 | 6513216.00 | 0.00 | 61225.02 | 0.00 | 0.00 | 1 |
| 11 | 0.00 | 0.00 | 39572.38 | 102085.48 | 0.00 | 0.00 | 0.00 | 0.00 | 37461.19 | 0.00 | … | 8476.11 | 29001.76 | 0.00 | 0.00 | 3069943.00 | 0.00 | 0.00 | 0.00 | 0.00 | 1 |
| 12 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | … | 0.00 | 0.00 | 0.00 | 360071.94 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 1 |
| 13 | 214887.48 | 250224.81 | 764692.88 | 440959.63 | 4499.10 | 0.00 | 250105.41 | 253094.77 | 0.00 | 0.00 | … | 0.00 | 0.00 | 0.00 | 0.00 | 5126750.50 | 323721.41 | 0.00 | 0.00 | 1290133.38 | 1 |
| 14 | 1024226.56 | 62647.80 | 907918.56 | 190326.44 | 0.00 | 357887.69 | 174800.92 | 39311.43 | 0.00 | 0.00 | … | 409826.63 | 339814.25 | 0.00 | 0.00 | 850082.00 | 80572.13 | 1511603.75 | 0.00 | 246942.27 | 1 |
| 15 | 850345.94 | 0.00 | 1142041.75 | 0.00 | 22913.52 | 83391.35 | 132192.95 | 0.00 | 0.00 | 0.00 | … | 0.00 | 0.00 | 0.00 | 0.00 | 12294757.00 | 0.00 | 580786.00 | 0.00 | 0.00 | 1 |
| 16 | 133160.09 | 0.00 | 324190.84 | 165610.81 | 0.00 | 529124.81 | 0.00 | 76230.84 | 0.00 | 0.00 | … | 0.00 | 0.00 | 0.00 | 0.00 | 3765545.50 | 112336.07 | 0.00 | 0.00 | 0.00 | 1 |
| 17 | 853561.81 | 224773.64 | 894039.13 | 256644.66 | 0.00 | 691336.94 | 151860.30 | 0.00 | 0.00 | 0.00 | … | 0.00 | 229604.53 | 0.00 | 0.00 | 13607436.00 | 275794.03 | 0.00 | 0.00 | 3668494.75 | 1 |
| 18 | 1093476.88 | 0.00 | 1066216.00 | 214933.13 | 1172.88 | 417991.06 | 0.00 | 0.00 | 0.00 | 0.00 | … | 0.00 | 303218.16 | 0.00 | 0.00 | 3830377.25 | 166417.11 | 0.00 | 0.00 | 0.00 | 1 |
| 19 | 835839.38 | 196176.73 | 1012032.63 | 282281.94 | 0.00 | 0.00 | 229121.41 | 90093.88 | 0.00 | 0.00 | … | 0.00 | 368116.94 | 0.00 | 0.00 | 1202129.13 | 269585.47 | 0.00 | 0.00 | 280330.34 | 1 |
| 20 | 0.00 | 0.00 | 0.00 | 0.00 | 69313.85 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | … | 0.00 | 0.00 | 0.00 | 0.00 | 10560.65 | 0.00 | 0.00 | 997972.56 | 0.00 | 1 |
| 21 | 701646.44 | 98642.90 | 1148627.88 | 162741.14 | 5982.86 | 451335.22 | 197993.38 | 107926.05 | 0.00 | 0.00 | … | 0.00 | 0.00 | 0.00 | 0.00 | 580906.13 | 147341.31 | 731664.13 | 0.00 | 0.00 | 1 |
| 22 | 0.00 | 123056.53 | 695162.56 | 0.00 | 0.00 | 0.00 | 151534.30 | 106993.80 | 0.00 | 0.00 | … | 93097.80 | 0.00 | 0.00 | 0.00 | 8234697.50 | 319331.75 | 0.00 | 0.00 | 0.00 | 1 |
| 23 | 617170.38 | 111139.70 | 585900.88 | 309262.72 | 0.00 | 463963.53 | 124548.41 | 68199.38 | 0.00 | 0.00 | … | 143815.31 | 0.00 | 0.00 | 0.00 | 1165821.50 | 194897.69 | 262373.09 | 0.00 | 0.00 | 1 |
| 24 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | … | 0.00 | 0.00 | 0.00 | 120912.78 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 1 |
| 25 | 205087.30 | 130860.28 | 170190.36 | 239147.09 | 32240.99 | 461357.53 | 79884.00 | 106250.06 | 0.00 | 0.00 | … | 93911.43 | 160792.20 | 0.00 | 0.00 | 0.00 | 0.00 | 211207.25 | 0.00 | 0.00 | 1 |
| 26 | 233611.23 | 0.00 | 288788.53 | 0.00 | 62809.87 | 572302.38 | 105359.08 | 0.00 | 0.00 | 0.00 | … | 81040.71 | 181801.95 | 0.00 | 257644.23 | 0.00 | 0.00 | 308586.69 | 0.00 | 0.00 | 1 |
| 27 | 443459.50 | 193747.16 | 328036.19 | 370594.88 | 46355.38 | 629435.25 | 74593.73 | 84710.16 | 0.00 | 0.00 | … | 108000.26 | 231578.25 | 0.00 | 0.00 | 364557.78 | 0.00 | 480221.81 | 0.00 | 61320.29 | 1 |
| 28 | 169506.22 | 94801.80 | 756320.94 | 227413.02 | 3680.05 | 663061.88 | 147819.56 | 112498.08 | 0.00 | 0.00 | … | 263977.31 | 322974.41 | 0.00 | 0.00 | 0.00 | 391799.50 | 1083744.13 | 0.00 | 0.00 | 1 |
| 29 | 0.00 | 0.00 | 0.00 | 801636.50 | 23726.37 | 737771.00 | 0.00 | 133648.45 | 0.00 | 0.00 | … | 122182.41 | 211591.83 | 0.00 | 0.00 | 0.00 | 250239.63 | 196264.91 | 0.00 | 0.00 | 1 |
| … | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … |
| 65 | 0.00 | 225195.66 | 19572.24 | 63537.30 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 1212757.50 | … | 0.00 | 0.00 | 0.00 | 325006.94 | 8263.08 | 0.00 | 77168.25 | 0.00 | 0.00 | 0 |
| 66 | 0.00 | 2340887.50 | 10041711.00 | 65790.56 | 257753.78 | 0.00 | 0.00 | 0.00 | 0.00 | 142773.91 | … | 0.00 | 0.00 | 0.00 | 15381708.00 | 9648307.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
| 67 | 0.00 | 40468.29 | 2929239.50 | 35529.07 | 0.00 | 0.00 | 134214.80 | 0.00 | 0.00 | 739789.69 | … | 0.00 | 96349.65 | 8238.51 | 174242.38 | 1659760.63 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
| 68 | 0.00 | 0.00 | 22582.54 | 275360.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | … | 0.00 | 0.00 | 0.00 | 2066323.88 | 176120.22 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
| 69 | 0.00 | 55406.89 | 37459.26 | 567906.94 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | … | 0.00 | 79680.77 | 2215088.25 | 53483.09 | 353274.03 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
| 70 | 0.00 | 1373136.00 | 55669.65 | 29413.53 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 1849143.63 | … | 0.00 | 0.00 | 0.00 | 208588.38 | 90467.52 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
| 71 | 0.00 | 2209497.50 | 0.00 | 332850.19 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 88801.86 | … | 675265.50 | 0.00 | 31135.10 | 264477.78 | 82188.95 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
| 72 | 0.00 | 53772.94 | 0.00 | 26620.26 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | … | 0.00 | 1740308.88 | 0.00 | 38134.36 | 292079.94 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
| 73 | 0.00 | 2577626.75 | 5790287.00 | 381110.81 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | … | 0.00 | 1179673.13 | 0.00 | 3556.30 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
| 74 | 0.00 | 0.00 | 0.00 | 1980458.38 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | … | 0.00 | 0.00 | 15431.62 | 0.00 | 46608.68 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
| 75 | 0.00 | 0.00 | 0.00 | 9948.27 | 0.00 | 0.00 | 55582.52 | 0.00 | 0.00 | 0.00 | … | 0.00 | 61258.17 | 155787.94 | 55921.07 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
| 76 | 0.00 | 7889.80 | 215028.61 | 10020.09 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | … | 0.00 | 0.00 | 73794.52 | 224818.03 | 5925.26 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
| 77 | 0.00 | 0.00 | 0.00 | 140673.16 | 16277292.00 | 1037529.88 | 147025.31 | 292055.81 | 0.00 | 0.00 | … | 0.00 | 181992.77 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
| 78 | 0.00 | 603047.88 | 675125.19 | 30792.79 | 0.00 | 419252.44 | 14130.80 | 0.00 | 0.00 | 0.00 | … | 0.00 | 60714.32 | 1038307.81 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
| 79 | 0.00 | 11717567.00 | 0.00 | 1276.74 | 57683.21 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | … | 0.00 | 0.00 | 0.00 | 4174.87 | 618743.06 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
| 80 | 0.00 | 1614557.63 | 234533.52 | 496465.50 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | … | 0.00 | 0.00 | 0.00 | 307068.22 | 275608.84 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
| 81 | 0.00 | 0.00 | 0.00 | 1464.59 | 148034.02 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | … | 1381.20 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 4450154.00 | 0 |
| 82 | 0.00 | 446516.91 | 0.00 | 144939.20 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 402528.88 | … | 121573.77 | 0.00 | 0.00 | 101450.37 | 11617.65 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
| 83 | 0.00 | 77867.39 | 0.00 | 207631.50 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | … | 15775.92 | 3139882.25 | 0.00 | 4056.35 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
| 84 | 11023.05 | 1640.80 | 17683.26 | 97989.88 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 1571.67 | … | 96426.15 | 0.00 | 0.00 | 62245.50 | 0.00 | 0.00 | 0.00 | 0.00 | 14222485.00 | 0 |
| 85 | 0.00 | 0.00 | 0.00 | 574.92 | 2521.91 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | … | 153162.88 | 0.00 | 0.00 | 674132.88 | 67454.39 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
| 86 | 13400.29 | 0.00 | 0.00 | 21661.37 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 328922.13 | … | 4786.63 | 0.00 | 0.00 | 1665447.00 | 1625.76 | 0.00 | 138802.00 | 0.00 | 0.00 | 0 |
| 87 | 0.00 | 823729.31 | 0.00 | 4515339.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | … | 26520.87 | 0.00 | 153672.52 | 0.00 | 0.00 | 0.00 | 0.00 | 1925521.25 | 0.00 | 0 |
| 88 | 0.00 | 179299.59 | 0.00 | 88929.42 | 0.00 | 1187859.25 | 0.00 | 0.00 | 0.00 | 0.00 | … | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 265478.72 | 302789.31 | 0.00 | 0.00 | 0 |
| 89 | 0.00 | 511629.00 | 0.00 | 8267.26 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | … | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 514513.66 | 0.00 | 0 |
| 90 | 0.00 | 77937.30 | 42382.20 | 5088.32 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | … | 0.00 | 0.00 | 0.00 | 69394.41 | 95436.05 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
| 91 | 0.00 | 2911.97 | 15953.10 | 80433.93 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | … | 89290.69 | 0.00 | 7406277.50 | 260645.84 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
| 92 | 0.00 | 6875.02 | 360036.50 | 28350.88 | 172198.25 | 7187.31 | 0.00 | 0.00 | 0.00 | 522638.75 | … | 212652.81 | 639224.63 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 489542.88 | 0 |
| 93 | 0.00 | 7963.32 | 29800.15 | 174881.72 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | … | 53438.88 | 0.00 | 0.00 | 8913.21 | 7853.11 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
| 94 | 0.00 | 0.00 | 0.00 | 371997.59 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 64870.32 | … | 0.00 | 0.00 | 0.00 | 1906689.38 | 304293.44 | 0.00 | 0.00 | 0.00 | 0.00 | 0 |
95 rows × 51 columns
ax = pd.DataFrame(np.transpose(data.head())).plot()

訓練分類器模型
這裡使用隨機森林建立一個簡單但具分類意義的分類器。
import numpy as np
import pandas as pd
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
# Build Train and Test data set
cre_X = cre.iloc[:,0:50]
cre_y = cre["CRE"]
train_X, test_X, train_y, test_y = train_test_split(cre_X, cre_y, test_size = 0.3)
# Build the random forest model
forest = ensemble.RandomForestClassifier(n_estimators = 100)
forest_fit = forest.fit(train_X, train_y)
test_y_predicted = forest.predict(test_X)
accuracy_rf = metrics.accuracy_score(test_y, test_y_predicted)
print(accuracy_rf)
0.8620689655172413
Set Up Module
%matplotlib inline
import os
import random
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from tqdm import tqdm_notebook as tqdm
from keras.models import Model
from keras.layers import Input, Reshape
from keras.layers.core import Dense, Activation, Dropout, Flatten
from keras.layers.normalization import BatchNormalization
from keras.layers.convolutional import UpSampling1D, Conv1D
from keras.layers.advanced_activations import LeakyReLU
from keras.optimizers import Adam, SGD
from keras.callbacks import TensorBoard
建立生成器
def get_generative(G_in, dense_dim=200, out_dim=50, lr=1e-3):
x = Dense(dense_dim)(G_in)
x = Activation('tanh')(x)
G_out = Dense(out_dim, activation='tanh')(x)
G = Model(G_in, G_out)
opt = SGD(lr=lr)
G.compile(loss='binary_crossentropy', optimizer=opt)
return G, G_out
G_in = Input(shape=[10])
G, G_out = get_generative(G_in)
G.summary()
Layer (type) Output Shape Param #
=================================================================
input_4 (InputLayer) (None, 10) 0
_________________________________________________________________
dense_5 (Dense) (None, 200) 2200
_________________________________________________________________
activation_2 (Activation) (None, 200) 0
_________________________________________________________________
dense_6 (Dense) (None, 50) 10050
=================================================================
Total params: 12,250
Trainable params: 12,250
Non-trainable params: 0
_________________________________________________________________
建立判別器
def get_discriminative(D_in, lr=1e-3, drate=.25, n_channels=50, conv_sz=5, leak=.2):
x = Reshape((-1, 1))(D_in)
x = Conv1D(n_channels, conv_sz, activation='relu')(x)
x = Dropout(drate)(x)
x = Flatten()(x)
x = Dense(n_channels)(x)
D_out = Dense(2, activation='sigmoid')(x)
D = Model(D_in, D_out)
dopt = Adam(lr=lr)
D.compile(loss='binary_crossentropy', optimizer=dopt)
return D, D_out
D_in = Input(shape=[50])
D, D_out = get_discriminative(D_in)
D.summary()
Layer (type) Output Shape Param #
=================================================================
input_5 (InputLayer) (None, 50) 0
_________________________________________________________________
reshape_2 (Reshape) (None, 50, 1) 0
_________________________________________________________________
conv1d_2 (Conv1D) (None, 46, 50) 300
_________________________________________________________________
dropout_2 (Dropout) (None, 46, 50) 0
_________________________________________________________________
flatten_2 (Flatten) (None, 2300) 0
_________________________________________________________________
dense_7 (Dense) (None, 50) 115050
_________________________________________________________________
dense_8 (Dense) (None, 2) 102
=================================================================
Total params: 115,452
Trainable params: 115,452
Non-trainable params: 0
_________________________________________________________________
串接兩神經網路
def set_trainability(model, trainable=False):
model.trainable = trainable
for layer in model.layers:
layer.trainable = trainable
def make_gan(GAN_in, G, D):
set_trainability(D, False)
x = G(GAN_in)
GAN_out = D(x)
GAN = Model(GAN_in, GAN_out)
GAN.compile(loss='binary_crossentropy', optimizer=G.optimizer)
return GAN, GAN_out
GAN_in = Input([10])
GAN, GAN_out = make_gan(GAN_in, G, D)
GAN.summary()
Layer (type) Output Shape Param #
=================================================================
input_6 (InputLayer) (None, 10) 0
_________________________________________________________________
model_4 (Model) (None, 50) 12250
_________________________________________________________________
model_5 (Model) (None, 2) 115452
=================================================================
Total params: 127,702
Trainable params: 12,250
Non-trainable params: 115,452
_________________________________________________________________
def sample_data_and_gen(G, noise_dim=10, n_samples=46):
XT = np.array(data11)
XN_noise = np.random.uniform(0, 1, size=[n_samples, noise_dim])
XN = G.predict(XN_noise)
X = np.concatenate((XT, XN))
y = np.zeros((2*n_samples, 2))
y[:n_samples, 1] = 1
y[n_samples:, 0] = 1
return X, y
def pretrain(G, D, noise_dim=10, n_samples=46, batch_size=32):
X, y = sample_data_and_gen(G, n_samples=n_samples, noise_dim=noise_dim)
set_trainability(D, True)
D.fit(X, y, epochs=1, batch_size=batch_size)
pretrain(G, D)
def sample_noise(G, noise_dim=10, n_samples=46):
X = np.random.uniform(0, 1, size=[n_samples, noise_dim])
y = np.zeros((n_samples, 2))
y[:, 1] = 1
return X, y
Epoch 1/1 92/92 [==============================] - ETA: 0s - loss: 2.393 - 1s 6ms/step - loss: 5.6152
訓練生成對抗網路
訓練生成對抗網路,並存取最後一次生成器產生結果
def train(GAN, G, D, epochs=500, n_samples=46, noise_dim=10, batch_size=32, verbose=False, v_freq=50,):
d_loss = []
g_loss = []
e_range = range(epochs)
if verbose:
e_range = tqdm(e_range)
for epoch in e_range:
X, y = sample_data_and_gen(G, n_samples=n_samples, noise_dim=noise_dim)
set_trainability(D, True)
d_loss.append(D.train_on_batch(X, y))
xx,yy = X,y
X, y = sample_noise(G, n_samples=n_samples, noise_dim=noise_dim)
set_trainability(D, False)
g_loss.append(GAN.train_on_batch(X, y))
if verbose and (epoch + 1) % v_freq == 0:
print("Epoch #{}: Generative Loss: {}, Discriminative Loss: {}".format(epoch + 1, g_loss[-1], d_loss[-1]))
return d_loss, g_loss, xx, yy
d_loss, g_loss ,xx,yy= train(GAN, G, D, verbose=True)
HBox(children=(IntProgress(value=0, max=500), HTML(value=’’)))
Epoch #50: Generative Loss: 11.389734268188477, Discriminative Loss: 8.015128135681152 Epoch #100: Generative Loss: 11.560905456542969, Discriminative Loss: 8.015127182006836 Epoch #150: Generative Loss: 11.707502365112305, Discriminative Loss: 8.01512622833252 Epoch #200: Generative Loss: 11.78805160522461, Discriminative Loss: 8.01512336730957 Epoch #250: Generative Loss: 11.92248821258545, Discriminative Loss: 8.015122413635254 Epoch #300: Generative Loss: 12.040063858032227, Discriminative Loss: 8.015122413635254 Epoch #350: Generative Loss: 12.16407299041748, Discriminative Loss: 8.015120506286621 Epoch #400: Generative Loss: 12.269856452941895, Discriminative Loss: 8.015120506286621 Epoch #450: Generative Loss: 12.354406356811523, Discriminative Loss: 8.015120506286621 Epoch #500: Generative Loss: 12.472232818603516, Discriminative Loss: 8.015120506286621
損失函數
ax = pd.DataFrame(
{
'Generative Loss': g_loss,
'Discriminative Loss': d_loss,
}
).plot(title='Training loss', logy=True)
ax.set_xlabel("Epochs")
ax.set_ylabel("Loss")
Text(0, 0.5, ‘Loss’)

最後一次生成器所生成資料
pd.DataFrame(xx)
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | … | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2.513577e+05 | 0.000000 | 4.942855e+05 | 114879.430000 | 31439.260000 | 0.000000 | 94049.750000 | 0.000000 | 0.000000 | 0.000000 | … | 0.000000 | 85986.770000 | 0.000000 | 54979.470000 | 0.000000 | 2.781723e+05 | 65956.080000 | 0.000000e+00 | 0.000000 | 0.000000e+00 |
| 1 | 3.945502e+05 | 65408.650000 | 2.186095e+06 | 137296.910000 | 0.000000 | 401122.910000 | 350882.590000 | 0.000000 | 0.000000 | 0.000000 | … | 0.000000 | 645223.630000 | 486622.780000 | 0.000000 | 0.000000 | 1.597353e+05 | 0.000000 | 1.143224e+06 | 0.000000 | 1.310850e+04 |
| 2 | 0.000000e+00 | 129236.210000 | 6.756088e+05 | 182865.200000 | 16074.490000 | 0.000000 | 0.000000 | 49122.420000 | 0.000000 | 0.000000 | … | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 2.591478e+05 | 130750.070000 | 0.000000e+00 | 0.000000 | 1.147132e+04 |
| 3 | 1.374033e+05 | 0.000000 | 8.180212e+05 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 24273.090000 | 0.000000 | 0.000000 | … | 0.000000 | 0.000000 | 0.000000 | 14327.790000 | 0.000000 | 0.000000e+00 | 113117.470000 | 0.000000e+00 | 0.000000 | 0.000000e+00 |
| 4 | 3.773588e+05 | 327564.660000 | 5.325026e+05 | 0.000000 | 0.000000 | 913255.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | … | 0.000000 | 48186.920000 | 241815.840000 | 0.000000 | 356398.220000 | 0.000000e+00 | 0.000000 | 0.000000e+00 | 0.000000 | 0.000000e+00 |
| 5 | 3.217003e+05 | 300239.310000 | 2.206495e+05 | 289622.500000 | 42589.680000 | 896569.380000 | 26930.330000 | 130587.490000 | 0.000000 | 0.000000 | … | 0.000000 | 74352.740000 | 161985.640000 | 0.000000 | 0.000000 | 1.054748e+04 | 0.000000 | 5.964156e+05 | 0.000000 | 0.000000e+00 |
| 6 | 1.223023e+05 | 163517.280000 | 1.439668e+05 | 197685.970000 | 44586.540000 | 665813.190000 | 68359.620000 | 86041.640000 | 0.000000 | 0.000000 | … | 0.000000 | 28788.660000 | 82527.430000 | 0.000000 | 0.000000 | 0.000000e+00 | 277068.660000 | 5.319472e+05 | 0.000000 | 0.000000e+00 |
| 7 | 4.583821e+05 | 136389.200000 | 4.124602e+05 | 294669.030000 | 46850.840000 | 470360.910000 | 70784.130000 | 52197.920000 | 0.000000 | 0.000000 | … | 0.000000 | 148098.280000 | 269423.690000 | 0.000000 | 0.000000 | 3.966286e+05 | 153470.940000 | 0.000000e+00 | 0.000000 | 5.992306e+04 |
| 8 | 4.047482e+05 | 97165.770000 | 8.001374e+05 | 134355.130000 | 0.000000 | 285973.690000 | 152992.250000 | 0.000000 | 0.000000 | 0.000000 | … | 0.000000 | 244165.310000 | 424717.970000 | 0.000000 | 0.000000 | 2.274332e+05 | 50524.480000 | 7.271856e+05 | 0.000000 | 8.150976e+04 |
| 9 | 0.000000e+00 | 237456.300000 | 4.894503e+05 | 317787.660000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | … | 0.000000 | 0.000000 | 374539.310000 | 0.000000 | 0.000000 | 3.642676e+05 | 0.000000 | 0.000000e+00 | 0.000000 | 6.622303e+04 |
| 10 | 0.000000e+00 | 60298.570000 | 2.422569e+05 | 0.000000 | 0.000000 | 0.000000 | 28529.950000 | 0.000000 | 577876.630000 | 0.000000 | … | 0.000000 | 0.000000 | 38658.570000 | 0.000000 | 224369.880000 | 6.513216e+06 | 0.000000 | 6.122502e+04 | 0.000000 | 0.000000e+00 |
| 11 | 0.000000e+00 | 0.000000 | 3.957238e+04 | 102085.480000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 37461.190000 | 0.000000 | … | 0.000000 | 8476.110000 | 29001.760000 | 0.000000 | 0.000000 | 3.069943e+06 | 0.000000 | 0.000000e+00 | 0.000000 | 0.000000e+00 |
| 12 | 0.000000e+00 | 0.000000 | 0.000000e+00 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | … | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 360071.940000 | 0.000000e+00 | 0.000000 | 0.000000e+00 | 0.000000 | 0.000000e+00 |
| 13 | 2.148875e+05 | 250224.810000 | 7.646929e+05 | 440959.630000 | 4499.100000 | 0.000000 | 250105.410000 | 253094.770000 | 0.000000 | 0.000000 | … | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 5.126750e+06 | 323721.410000 | 0.000000e+00 | 0.000000 | 1.290133e+06 |
| 14 | 1.024227e+06 | 62647.800000 | 9.079186e+05 | 190326.440000 | 0.000000 | 357887.690000 | 174800.920000 | 39311.430000 | 0.000000 | 0.000000 | … | 0.000000 | 409826.630000 | 339814.250000 | 0.000000 | 0.000000 | 8.500820e+05 | 80572.130000 | 1.511604e+06 | 0.000000 | 2.469423e+05 |
| 15 | 8.503459e+05 | 0.000000 | 1.142042e+06 | 0.000000 | 22913.520000 | 83391.350000 | 132192.950000 | 0.000000 | 0.000000 | 0.000000 | … | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 1.229476e+07 | 0.000000 | 5.807860e+05 | 0.000000 | 0.000000e+00 |
| 16 | 1.331601e+05 | 0.000000 | 3.241908e+05 | 165610.810000 | 0.000000 | 529124.810000 | 0.000000 | 76230.840000 | 0.000000 | 0.000000 | … | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 3.765546e+06 | 112336.070000 | 0.000000e+00 | 0.000000 | 0.000000e+00 |
| 17 | 8.535618e+05 | 224773.640000 | 8.940391e+05 | 256644.660000 | 0.000000 | 691336.940000 | 151860.300000 | 0.000000 | 0.000000 | 0.000000 | … | 0.000000 | 0.000000 | 229604.530000 | 0.000000 | 0.000000 | 1.360744e+07 | 275794.030000 | 0.000000e+00 | 0.000000 | 3.668495e+06 |
| 18 | 1.093477e+06 | 0.000000 | 1.066216e+06 | 214933.130000 | 1172.880000 | 417991.060000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | … | 0.000000 | 0.000000 | 303218.160000 | 0.000000 | 0.000000 | 3.830377e+06 | 166417.110000 | 0.000000e+00 | 0.000000 | 0.000000e+00 |
| 19 | 8.358394e+05 | 196176.730000 | 1.012033e+06 | 282281.940000 | 0.000000 | 0.000000 | 229121.410000 | 90093.880000 | 0.000000 | 0.000000 | … | 0.000000 | 0.000000 | 368116.940000 | 0.000000 | 0.000000 | 1.202129e+06 | 269585.470000 | 0.000000e+00 | 0.000000 | 2.803303e+05 |
| 20 | 0.000000e+00 | 0.000000 | 0.000000e+00 | 0.000000 | 69313.850000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | … | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 1.056065e+04 | 0.000000 | 0.000000e+00 | 997972.560000 | 0.000000e+00 |
| 21 | 7.016464e+05 | 98642.900000 | 1.148628e+06 | 162741.140000 | 5982.860000 | 451335.220000 | 197993.380000 | 107926.050000 | 0.000000 | 0.000000 | … | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 5.809061e+05 | 147341.310000 | 7.316641e+05 | 0.000000 | 0.000000e+00 |
| 22 | 0.000000e+00 | 123056.530000 | 6.951626e+05 | 0.000000 | 0.000000 | 0.000000 | 151534.300000 | 106993.800000 | 0.000000 | 0.000000 | … | 0.000000 | 93097.800000 | 0.000000 | 0.000000 | 0.000000 | 8.234698e+06 | 319331.750000 | 0.000000e+00 | 0.000000 | 0.000000e+00 |
| 23 | 6.171704e+05 | 111139.700000 | 5.859009e+05 | 309262.720000 | 0.000000 | 463963.530000 | 124548.410000 | 68199.380000 | 0.000000 | 0.000000 | … | 0.000000 | 143815.310000 | 0.000000 | 0.000000 | 0.000000 | 1.165822e+06 | 194897.690000 | 2.623731e+05 | 0.000000 | 0.000000e+00 |
| 24 | 0.000000e+00 | 0.000000 | 0.000000e+00 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | … | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 120912.780000 | 0.000000e+00 | 0.000000 | 0.000000e+00 | 0.000000 | 0.000000e+00 |
| 25 | 2.050873e+05 | 130860.280000 | 1.701904e+05 | 239147.090000 | 32240.990000 | 461357.530000 | 79884.000000 | 106250.060000 | 0.000000 | 0.000000 | … | 0.000000 | 93911.430000 | 160792.200000 | 0.000000 | 0.000000 | 0.000000e+00 | 0.000000 | 2.112072e+05 | 0.000000 | 0.000000e+00 |
| 26 | 2.336112e+05 | 0.000000 | 2.887885e+05 | 0.000000 | 62809.870000 | 572302.380000 | 105359.080000 | 0.000000 | 0.000000 | 0.000000 | … | 0.000000 | 81040.710000 | 181801.950000 | 0.000000 | 257644.230000 | 0.000000e+00 | 0.000000 | 3.085867e+05 | 0.000000 | 0.000000e+00 |
| 27 | 4.434595e+05 | 193747.160000 | 3.280362e+05 | 370594.880000 | 46355.380000 | 629435.250000 | 74593.730000 | 84710.160000 | 0.000000 | 0.000000 | … | 0.000000 | 108000.260000 | 231578.250000 | 0.000000 | 0.000000 | 3.645578e+05 | 0.000000 | 4.802218e+05 | 0.000000 | 6.132029e+04 |
| 28 | 1.695062e+05 | 94801.800000 | 7.563209e+05 | 227413.020000 | 3680.050000 | 663061.880000 | 147819.560000 | 112498.080000 | 0.000000 | 0.000000 | … | 0.000000 | 263977.310000 | 322974.410000 | 0.000000 | 0.000000 | 0.000000e+00 | 391799.500000 | 1.083744e+06 | 0.000000 | 0.000000e+00 |
| 29 | 0.000000e+00 | 0.000000 | 0.000000e+00 | 801636.500000 | 23726.370000 | 737771.000000 | 0.000000 | 133648.450000 | 0.000000 | 0.000000 | … | 0.000000 | 122182.410000 | 211591.830000 | 0.000000 | 0.000000 | 0.000000e+00 | 250239.630000 | 1.962649e+05 | 0.000000 | 0.000000e+00 |
| … | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … |
| 62 | 5.771863e-02 | 0.079141 | 9.384196e-02 | 0.125138 | 0.146934 | 0.233003 | 0.055012 | -0.087537 | -0.007778 | 0.055186 | … | 0.057421 | -0.197108 | -0.061168 | 0.211870 | -0.066151 | 1.301075e-01 | -0.054132 | -2.114740e-01 | -0.090373 | -4.699485e-02 |
| 63 | 1.442752e-02 | 0.051881 | 2.286542e-02 | 0.104279 | 0.116842 | 0.140988 | 0.056342 | -0.070146 | -0.031679 | 0.097089 | … | 0.035543 | -0.120193 | -0.021412 | 0.093633 | -0.050723 | 1.535993e-01 | -0.029451 | -1.341466e-01 | -0.073321 | -4.161552e-03 |
| 64 | 1.278929e-01 | 0.077950 | 5.305723e-02 | 0.144055 | 0.165029 | 0.139697 | 0.028592 | -0.105480 | -0.035320 | 0.071927 | … | 0.008859 | -0.174204 | -0.038903 | 0.210827 | -0.074771 | 9.185766e-02 | -0.035059 | -1.106470e-01 | -0.130182 | -6.297275e-02 |
| 65 | 1.447559e-01 | 0.045958 | 4.400671e-02 | 0.140874 | 0.129621 | 0.157389 | 0.072795 | -0.123201 | -0.072477 | 0.076058 | … | 0.007564 | -0.158442 | -0.017006 | 0.092313 | -0.071628 | 1.778769e-01 | -0.032934 | -1.343839e-01 | -0.067688 | -1.133780e-01 |
| 66 | 2.923003e-02 | 0.089982 | 7.115061e-02 | 0.160336 | 0.188756 | 0.178656 | 0.076112 | -0.153013 | -0.053440 | 0.141031 | … | 0.099056 | -0.201940 | -0.015563 | 0.197481 | -0.082291 | 1.690800e-01 | 0.004397 | -1.911636e-01 | -0.194577 | -9.241361e-02 |
| 67 | 4.488285e-02 | 0.014902 | 5.291061e-02 | 0.093878 | 0.111078 | 0.141065 | 0.053293 | -0.044797 | -0.012182 | -0.004407 | … | 0.039949 | -0.139107 | -0.044550 | 0.143295 | -0.049501 | 6.762740e-02 | -0.030763 | -7.233275e-02 | -0.064332 | -1.079918e-01 |
| 68 | 5.010782e-02 | 0.045066 | 6.465222e-02 | 0.136270 | 0.160859 | 0.171901 | 0.080074 | -0.103908 | -0.043519 | 0.132829 | … | 0.054123 | -0.178683 | -0.003971 | 0.133090 | -0.074374 | 1.734688e-01 | -0.000379 | -1.489321e-01 | -0.165764 | -9.517734e-02 |
| 69 | -8.699703e-02 | 0.088150 | 6.905080e-02 | 0.141996 | 0.176542 | 0.143441 | 0.008008 | -0.110503 | -0.008441 | 0.164581 | … | 0.082234 | -0.144232 | -0.021611 | 0.194980 | -0.062477 | 1.285854e-01 | 0.015981 | -1.959769e-01 | -0.218486 | 6.528822e-03 |
| 70 | 1.163195e-01 | 0.049792 | 9.390505e-02 | 0.149623 | 0.172283 | 0.179477 | 0.073764 | -0.113348 | -0.041673 | 0.072650 | … | 0.052443 | -0.211731 | -0.025951 | 0.199543 | -0.064184 | 1.280974e-01 | -0.010837 | -1.773765e-01 | -0.168073 | -1.308074e-01 |
| 71 | -3.098747e-02 | 0.080269 | 7.809231e-02 | 0.135378 | 0.180432 | 0.145843 | -0.010058 | -0.092386 | -0.011612 | 0.128141 | … | 0.046156 | -0.147168 | -0.035000 | 0.201276 | -0.083927 | 1.009080e-01 | 0.012110 | -1.150701e-01 | -0.210679 | -7.272352e-02 |
| 72 | -5.603977e-05 | 0.086260 | 6.558941e-02 | 0.162166 | 0.183209 | 0.142338 | 0.036340 | -0.155236 | -0.057950 | 0.176502 | … | 0.069604 | -0.166726 | -0.004081 | 0.157140 | -0.070198 | 1.764633e-01 | 0.018980 | -2.049197e-01 | -0.212454 | -5.348644e-02 |
| 73 | -1.597475e-02 | 0.082567 | 6.936116e-02 | 0.128655 | 0.213990 | 0.148111 | 0.059413 | -0.123450 | -0.016059 | 0.116500 | … | 0.115040 | -0.171914 | -0.035751 | 0.220132 | -0.084824 | 1.483972e-01 | -0.024151 | -1.925847e-01 | -0.186185 | 4.065286e-02 |
| 74 | -4.355310e-02 | 0.124092 | 8.693540e-02 | 0.143820 | 0.139506 | 0.224342 | -0.001981 | -0.055389 | 0.015957 | 0.082807 | … | 0.075091 | -0.204232 | -0.073173 | 0.252675 | -0.072187 | 8.624671e-02 | 0.004114 | -1.449837e-01 | -0.181872 | -1.628515e-01 |
| 75 | 7.016601e-02 | 0.126638 | 6.968953e-02 | 0.177304 | 0.197027 | 0.169905 | 0.025738 | -0.153522 | -0.052389 | 0.155450 | … | 0.053709 | -0.209556 | -0.034219 | 0.236195 | -0.079108 | 1.532988e-01 | -0.002492 | -2.017526e-01 | -0.211118 | -6.792208e-02 |
| 76 | -3.582065e-02 | 0.075462 | 7.358342e-02 | 0.120523 | 0.172002 | 0.175398 | 0.036168 | -0.064960 | 0.008145 | 0.100263 | … | 0.090297 | -0.176223 | -0.045846 | 0.214244 | -0.068341 | 1.150602e-01 | -0.008958 | -1.573523e-01 | -0.179583 | -3.757584e-02 |
| 77 | 1.149180e-03 | 0.073993 | 4.709528e-02 | 0.116353 | 0.148364 | 0.141842 | 0.057276 | -0.100674 | -0.030467 | 0.045873 | … | 0.102190 | -0.153453 | -0.057053 | 0.165054 | -0.053285 | 1.368121e-01 | -0.029020 | -1.778644e-01 | -0.089894 | -2.899860e-02 |
| 78 | 4.883933e-02 | 0.073878 | 1.052822e-01 | 0.148079 | 0.173811 | 0.176635 | 0.019220 | -0.105041 | -0.022027 | 0.060350 | … | 0.063225 | -0.193632 | -0.050965 | 0.226729 | -0.071156 | 9.797296e-02 | -0.000686 | -1.610914e-01 | -0.181303 | -1.430665e-01 |
| 79 | -1.273230e-02 | 0.056331 | 4.888410e-02 | 0.133763 | 0.174581 | 0.110827 | 0.026463 | -0.120391 | -0.043959 | 0.175507 | … | 0.039367 | -0.124524 | 0.004223 | 0.121695 | -0.069352 | 1.589927e-01 | 0.010103 | -1.553590e-01 | -0.195841 | 8.593322e-03 |
| 80 | 2.019642e-02 | 0.058863 | 8.318582e-02 | 0.158097 | 0.164991 | 0.160093 | 0.028337 | -0.099454 | -0.029948 | 0.158778 | … | 0.037951 | -0.184605 | -0.000601 | 0.179939 | -0.057108 | 1.289516e-01 | 0.034764 | -1.603799e-01 | -0.239722 | -1.197372e-01 |
| 81 | 1.089811e-01 | 0.047334 | 5.823605e-02 | 0.129653 | 0.186784 | 0.130830 | 0.055852 | -0.122106 | -0.045716 | 0.084037 | … | 0.033420 | -0.157943 | -0.022635 | 0.170346 | -0.087565 | 1.277712e-01 | -0.032698 | -1.151622e-01 | -0.139719 | -3.704622e-02 |
| 82 | -2.369104e-02 | 0.039272 | 1.003548e-01 | 0.121072 | 0.176277 | 0.160217 | 0.028175 | -0.068355 | -0.001034 | 0.080345 | … | 0.086252 | -0.168808 | -0.040289 | 0.182596 | -0.066557 | 1.155214e-01 | 0.013119 | -1.522985e-01 | -0.200415 | -1.017104e-01 |
| 83 | 3.295303e-02 | 0.128977 | 3.527293e-02 | 0.149690 | 0.177678 | 0.157079 | 0.031657 | -0.120921 | -0.033545 | 0.140918 | … | 0.056751 | -0.177175 | -0.040286 | 0.232053 | -0.078717 | 1.313213e-01 | -0.022502 | -1.580906e-01 | -0.166002 | -2.041462e-03 |
| 84 | -2.193222e-02 | 0.071473 | 4.067374e-02 | 0.127829 | 0.129760 | 0.156506 | 0.085491 | -0.065933 | -0.019193 | 0.073946 | … | 0.110103 | -0.187463 | -0.036088 | 0.186077 | -0.044486 | 1.043225e-01 | -0.003263 | -1.358489e-01 | -0.140418 | -1.032844e-01 |
| 85 | 1.287738e-03 | 0.134546 | 3.888072e-02 | 0.165624 | 0.126719 | 0.164514 | 0.009274 | -0.132407 | -0.053828 | 0.152904 | … | 0.034691 | -0.164441 | -0.028324 | 0.185680 | -0.063293 | 1.271236e-01 | 0.004165 | -1.574730e-01 | -0.149576 | -9.104238e-02 |
| 86 | 1.190792e-01 | 0.049373 | 7.937831e-02 | 0.141312 | 0.137289 | 0.203820 | 0.068109 | -0.103065 | -0.043260 | 0.092760 | … | 0.010624 | -0.187389 | -0.018631 | 0.147604 | -0.076098 | 1.515454e-01 | -0.025110 | -1.434764e-01 | -0.115842 | -1.291046e-01 |
| 87 | 4.425447e-02 | 0.121940 | 6.427467e-02 | 0.144705 | 0.201681 | 0.167424 | 0.014653 | -0.138411 | -0.031778 | 0.123827 | … | 0.048905 | -0.167162 | -0.051302 | 0.238433 | -0.095100 | 1.377496e-01 | -0.043771 | -1.745853e-01 | -0.156156 | 2.941268e-02 |
| 88 | 1.352898e-02 | 0.093871 | 1.029101e-01 | 0.129897 | 0.160283 | 0.241069 | 0.037356 | -0.079107 | 0.009802 | 0.064191 | … | 0.071833 | -0.204458 | -0.059586 | 0.262838 | -0.096586 | 7.896692e-02 | -0.029935 | -1.215087e-01 | -0.154695 | -1.246584e-01 |
| 89 | -6.471997e-02 | 0.161791 | 8.699533e-02 | 0.166800 | 0.153273 | 0.239945 | -0.011309 | -0.127351 | -0.014987 | 0.153934 | … | 0.075217 | -0.197810 | -0.053932 | 0.260759 | -0.086715 | 1.205225e-01 | 0.004634 | -2.008244e-01 | -0.192758 | -1.036462e-01 |
| 90 | -7.696584e-03 | 0.057619 | 1.040991e-01 | 0.114195 | 0.183359 | 0.196935 | 0.010609 | -0.030886 | 0.040294 | 0.088672 | … | 0.050991 | -0.185898 | -0.048450 | 0.255344 | -0.076115 | 6.810440e-02 | -0.018218 | -1.282074e-01 | -0.204055 | -3.708909e-02 |
| 91 | 2.760612e-02 | 0.067704 | 3.295968e-02 | 0.129812 | 0.154076 | 0.102998 | 0.043750 | -0.084157 | -0.033504 | 0.080922 | … | 0.073709 | -0.159288 | -0.034829 | 0.167826 | -0.045594 | 1.152339e-01 | -0.004282 | -1.422732e-01 | -0.147273 | -4.370746e-02 |
92 rows × 50 columns
pd.DataFrame(np.transpose(xx)).plot()
<matplotlib.axes._subplots.AxesSubplot at 0x21e22a40c50>

Test the generation
使用最後一次生成結果匯入前面訓練好的分類模型,檢查是否能判別為第一類別。
test_y_predicted = forest.predict(xx)
pd.DataFrame(test_y_predicted)
| 0 | |
|---|---|
| 0 | 1 |
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 1 |
| 7 | 1 |
| 8 | 1 |
| 9 | 1 |
| 10 | 1 |
| 11 | 1 |
| 12 | 1 |
| 13 | 1 |
| 14 | 1 |
| 15 | 1 |
| 16 | 1 |
| 17 | 1 |
| 18 | 1 |
| 19 | 1 |
| 20 | 1 |
| 21 | 1 |
| 22 | 1 |
| 23 | 1 |
| 24 | 1 |
| 25 | 1 |
| 26 | 1 |
| 27 | 1 |
| 28 | 1 |
| 29 | 1 |
| … | … |
| 62 | 0 |
| 63 | 0 |
| 64 | 0 |
| 65 | 0 |
| 66 | 0 |
| 67 | 0 |
| 68 | 0 |
| 69 | 0 |
| 70 | 0 |
| 71 | 0 |
| 72 | 0 |
| 73 | 0 |
| 74 | 0 |
| 75 | 0 |
| 76 | 0 |
| 77 | 0 |
| 78 | 0 |
| 79 | 0 |
| 80 | 0 |
| 81 | 0 |
| 82 | 0 |
| 83 | 0 |
| 84 | 0 |
| 85 | 0 |
| 86 | 0 |
| 87 | 0 |
| 88 | 0 |
| 89 | 0 |
| 90 | 0 |
| 91 | 0 |
92 rows × 1 columns
判別為正確的比例:
sum(test_y_predicted)/len(test_y_predicted)
0.4673913043478261
結論
我們可以看到,生成的樣本分類率僅0.46左右,可以說是相當不理想,但換個角度思考,這當中有46%的資料是可以當作新的樣本加入訓練集,因此我們可透過事先建立的分類器來當作衡量樣本是否可當作是當的生成樣本。且若我們僅憑肉眼看生成的資料,其範圍也落在0-40000這個區間左右,矩陣稀疏情況也看似接近。當然,生成對抗網路還有許多細節可以調整,也許可以調整學習率、backpropagation、drop out等等事項來改善生成器神經網路。先前看到有多種生成對抗網路,如conditional-GAN,MCF-GAN等等,也許我可以學習其他類型架構的生成對抗網路來完成這樣工作也不一定。