|
| 1 | +import matplotlib.gridspec as gridspec |
| 2 | +import matplotlib.pyplot as plt |
| 3 | +import numpy as np |
| 4 | +from sklearn.utils import shuffle |
| 5 | +import input_data |
| 6 | + |
| 7 | +random_numer = 42 |
| 8 | + |
| 9 | +np.random.seed(random_numer) |
| 10 | +def ReLu(x): |
| 11 | + mask = (x>0) * 1.0 |
| 12 | + return mask *x |
| 13 | +def d_ReLu(x): |
| 14 | + mask = (x>0) * 1.0 |
| 15 | + return mask |
| 16 | + |
| 17 | +def arctan(x): |
| 18 | + return np.arctan(x) |
| 19 | +def d_arctan(x): |
| 20 | + return 1 / (1 + x ** 2) |
| 21 | + |
| 22 | +def log(x): |
| 23 | + return 1 / ( 1+ np.exp(-1*x)) |
| 24 | +def d_log(x): |
| 25 | + return log(x) * (1 - log(x)) |
| 26 | + |
| 27 | +def tanh(x): |
| 28 | + return np.tanh(x) |
| 29 | +def d_tanh(x): |
| 30 | + return 1 - np.tanh(x) ** 2 |
| 31 | + |
| 32 | +def plot(samples): |
| 33 | + fig = plt.figure(figsize=(4, 4)) |
| 34 | + gs = gridspec.GridSpec(4, 4) |
| 35 | + gs.update(wspace=0.05, hspace=0.05) |
| 36 | + |
| 37 | + for i, sample in enumerate(samples): |
| 38 | + ax = plt.subplot(gs[i]) |
| 39 | + plt.axis('off') |
| 40 | + ax.set_xticklabels([]) |
| 41 | + ax.set_yticklabels([]) |
| 42 | + ax.set_aspect('equal') |
| 43 | + plt.imshow(sample.reshape(28, 28), cmap='Greys_r') |
| 44 | + |
| 45 | + return fig |
| 46 | + |
| 47 | + |
| 48 | + |
| 49 | +# 1. Load Data and declare hyper |
| 50 | +print('--------- Load Data ----------') |
| 51 | +mnist = input_data.read_data_sets('MNIST_data', one_hot=False) |
| 52 | +temp = mnist.test |
| 53 | +images, labels = temp.images, temp.labels |
| 54 | +images, labels = shuffle(np.asarray(images),np.asarray(labels)) |
| 55 | +num_epoch = 10 |
| 56 | +learing_rate = 0.00009 |
| 57 | +G_input = 100 |
| 58 | +hidden_input,hidden_input2,hidden_input3 = 128,256,346 |
| 59 | +hidden_input4,hidden_input5,hidden_input6 = 480,560,686 |
| 60 | + |
| 61 | + |
| 62 | + |
| 63 | +print('--------- Declare Hyper Parameters ----------') |
| 64 | +# 2. Declare Weights |
| 65 | +D_W1 = np.random.normal(size=(784,hidden_input),scale=(1. / np.sqrt(784 / 2.))) *0.002 |
| 66 | +# D_b1 = np.random.normal(size=(128),scale=(1. / np.sqrt(128 / 2.))) *0.002 |
| 67 | +D_b1 = np.zeros(hidden_input) |
| 68 | + |
| 69 | +D_W2 = np.random.normal(size=(hidden_input,1),scale=(1. / np.sqrt(hidden_input / 2.))) *0.002 |
| 70 | +# D_b2 = np.random.normal(size=(1),scale=(1. / np.sqrt(1 / 2.))) *0.002 |
| 71 | +D_b2 = np.zeros(1) |
| 72 | + |
| 73 | + |
| 74 | +G_W1 = np.random.normal(size=(G_input,hidden_input),scale=(1. / np.sqrt(G_input / 2.))) *0.002 |
| 75 | +# G_b1 = np.random.normal(size=(128),scale=(1. / np.sqrt(128 / 2.))) *0.002 |
| 76 | +G_b1 = np.zeros(hidden_input) |
| 77 | + |
| 78 | +G_W2 = np.random.normal(size=(hidden_input,hidden_input2),scale=(1. / np.sqrt(hidden_input / 2.))) *0.002 |
| 79 | +# G_b1 = np.random.normal(size=(128),scale=(1. / np.sqrt(128 / 2.))) *0.002 |
| 80 | +G_b2 = np.zeros(hidden_input2) |
| 81 | + |
| 82 | +G_W3 = np.random.normal(size=(hidden_input2,hidden_input3),scale=(1. / np.sqrt(hidden_input2 / 2.))) *0.002 |
| 83 | +# G_b1 = np.random.normal(size=(128),scale=(1. / np.sqrt(128 / 2.))) *0.002 |
| 84 | +G_b3 = np.zeros(hidden_input3) |
| 85 | + |
| 86 | +G_W4 = np.random.normal(size=(hidden_input3,hidden_input4),scale=(1. / np.sqrt(hidden_input3 / 2.))) *0.002 |
| 87 | +# G_b1 = np.random.normal(size=(128),scale=(1. / np.sqrt(128 / 2.))) *0.002 |
| 88 | +G_b4 = np.zeros(hidden_input4) |
| 89 | + |
| 90 | +G_W5 = np.random.normal(size=(hidden_input4,hidden_input5),scale=(1. / np.sqrt(hidden_input4 / 2.))) *0.002 |
| 91 | +# G_b1 = np.random.normal(size=(128),scale=(1. / np.sqrt(128 / 2.))) *0.002 |
| 92 | +G_b5 = np.zeros(hidden_input5) |
| 93 | + |
| 94 | +G_W6 = np.random.normal(size=(hidden_input5,hidden_input6),scale=(1. / np.sqrt(hidden_input5 / 2.))) *0.002 |
| 95 | +# G_b1 = np.random.normal(size=(128),scale=(1. / np.sqrt(128 / 2.))) *0.002 |
| 96 | +G_b6 = np.zeros(hidden_input6) |
| 97 | + |
| 98 | +G_W7 = np.random.normal(size=(hidden_input6,784),scale=(1. / np.sqrt(hidden_input6 / 2.))) *0.002 |
| 99 | +# G_b2 = np.random.normal(size=(784),scale=(1. / np.sqrt(784 / 2.))) *0.002 |
| 100 | +G_b7 = np.zeros(784) |
| 101 | + |
| 102 | +# 3. For Adam Optimzier |
| 103 | +v1,m1 = 0,0 |
| 104 | +v2,m2 = 0,0 |
| 105 | +v3,m3 = 0,0 |
| 106 | +v4,m4 = 0,0 |
| 107 | + |
| 108 | +v5,m5 = 0,0 |
| 109 | +v6,m6 = 0,0 |
| 110 | +v7,m7 = 0,0 |
| 111 | +v8,m8 = 0,0 |
| 112 | +v9,m9 = 0,0 |
| 113 | +v10,m10 = 0,0 |
| 114 | +v11,m11 = 0,0 |
| 115 | +v12,m12 = 0,0 |
| 116 | + |
| 117 | +v13,m13 = 0,0 |
| 118 | +v14,m14 = 0,0 |
| 119 | + |
| 120 | +v15,m15 = 0,0 |
| 121 | +v16,m16 = 0,0 |
| 122 | + |
| 123 | +v17,m17 = 0,0 |
| 124 | +v18,m18 = 0,0 |
| 125 | + |
| 126 | + |
| 127 | +beta_1,beta_2,eps = 0.9,0.999,0.00000001 |
| 128 | + |
| 129 | +print('--------- Started Training ----------') |
| 130 | +for iter in range(num_epoch): |
| 131 | + |
| 132 | + random_int = np.random.randint(len(images) - 5) |
| 133 | + current_image = np.expand_dims(images[random_int],axis=0) |
| 134 | + |
| 135 | + # Func: Generate The first Fake Data |
| 136 | + Z = np.random.uniform(-1., 1., size=[1, G_input]) |
| 137 | + Gl1 = Z.dot(G_W1) + G_b1 |
| 138 | + Gl1A = arctan(Gl1) |
| 139 | + Gl2 = Gl1A.dot(G_W2) + G_b2 |
| 140 | + Gl2A = ReLu(Gl2) |
| 141 | + Gl3 = Gl2A.dot(G_W3) + G_b3 |
| 142 | + Gl3A = arctan(Gl3) |
| 143 | + |
| 144 | + Gl4 = Gl3A.dot(G_W4) + G_b4 |
| 145 | + Gl4A = ReLu(Gl4) |
| 146 | + Gl5 = Gl4A.dot(G_W5) + G_b5 |
| 147 | + Gl5A = tanh(Gl5) |
| 148 | + Gl6 = Gl5A.dot(G_W6) + G_b6 |
| 149 | + Gl6A = ReLu(Gl6) |
| 150 | + Gl7 = Gl6A.dot(G_W7) + G_b7 |
| 151 | + |
| 152 | + current_fake_data = log(Gl7) |
| 153 | + |
| 154 | + # Func: Forward Feed for Real data |
| 155 | + Dl1_r = current_image.dot(D_W1) + D_b1 |
| 156 | + Dl1_rA = ReLu(Dl1_r) |
| 157 | + Dl2_r = Dl1_rA.dot(D_W2) + D_b2 |
| 158 | + Dl2_rA = log(Dl2_r) |
| 159 | + |
| 160 | + # Func: Forward Feed for Fake Data |
| 161 | + Dl1_f = current_fake_data.dot(D_W1) + D_b1 |
| 162 | + Dl1_fA = ReLu(Dl1_f) |
| 163 | + Dl2_f = Dl1_fA.dot(D_W2) + D_b2 |
| 164 | + Dl2_fA = log(Dl2_f) |
| 165 | + |
| 166 | + # Func: Cost D |
| 167 | + D_cost = -np.log(Dl2_rA) + np.log(1.0- Dl2_fA) |
| 168 | + |
| 169 | + # Func: Gradient |
| 170 | + grad_f_w2_part_1 = 1/(1.0- Dl2_fA) |
| 171 | + grad_f_w2_part_2 = d_log(Dl2_f) |
| 172 | + grad_f_w2_part_3 = Dl1_fA |
| 173 | + grad_f_w2 = grad_f_w2_part_3.T.dot(grad_f_w2_part_1 * grad_f_w2_part_2) |
| 174 | + grad_f_b2 = grad_f_w2_part_1 * grad_f_w2_part_2 |
| 175 | + |
| 176 | + grad_f_w1_part_1 = (grad_f_w2_part_1 * grad_f_w2_part_2).dot(D_W2.T) |
| 177 | + grad_f_w1_part_2 = d_ReLu(Dl1_f) |
| 178 | + grad_f_w1_part_3 = current_fake_data |
| 179 | + grad_f_w1 = grad_f_w1_part_3.T.dot(grad_f_w1_part_1 * grad_f_w1_part_2) |
| 180 | + grad_f_b1 = grad_f_w1_part_1 * grad_f_w1_part_2 |
| 181 | + |
| 182 | + grad_r_w2_part_1 = - 1/Dl2_rA |
| 183 | + grad_r_w2_part_2 = d_log(Dl2_r) |
| 184 | + grad_r_w2_part_3 = Dl1_rA |
| 185 | + grad_r_w2 = grad_r_w2_part_3.T.dot(grad_r_w2_part_1 * grad_r_w2_part_2) |
| 186 | + grad_r_b2 = grad_r_w2_part_1 * grad_r_w2_part_2 |
| 187 | + |
| 188 | + grad_r_w1_part_1 = (grad_r_w2_part_1 * grad_r_w2_part_2).dot(D_W2.T) |
| 189 | + grad_r_w1_part_2 = d_ReLu(Dl1_r) |
| 190 | + grad_r_w1_part_3 = current_image |
| 191 | + grad_r_w1 = grad_r_w1_part_3.T.dot(grad_r_w1_part_1 * grad_r_w1_part_2) |
| 192 | + grad_r_b1 = grad_r_w1_part_1 * grad_r_w1_part_2 |
| 193 | + |
| 194 | + grad_w1 =grad_f_w1 + grad_r_w1 |
| 195 | + grad_b1 =grad_f_b1 + grad_r_b1 |
| 196 | + |
| 197 | + grad_w2 =grad_f_w2 + grad_r_w2 |
| 198 | + grad_b2 =grad_f_b2 + grad_r_b2 |
| 199 | + |
| 200 | + # ---- Update Gradient ---- |
| 201 | + m1 = beta_1 * m1 + (1 - beta_1) * grad_w1 |
| 202 | + v1 = beta_2 * v1 + (1 - beta_2) * grad_w1 ** 2 |
| 203 | + |
| 204 | + m2 = beta_1 * m2 + (1 - beta_1) * grad_b1 |
| 205 | + v2 = beta_2 * v2 + (1 - beta_2) * grad_b1 ** 2 |
| 206 | + |
| 207 | + m3 = beta_1 * m3 + (1 - beta_1) * grad_w2 |
| 208 | + v3 = beta_2 * v3 + (1 - beta_2) * grad_w2 ** 2 |
| 209 | + |
| 210 | + m4 = beta_1 * m4 + (1 - beta_1) * grad_b2 |
| 211 | + v4 = beta_2 * v4 + (1 - beta_2) * grad_b2 ** 2 |
| 212 | + |
| 213 | + D_W1 = D_W1 - (learing_rate / (np.sqrt(v1 /(1-beta_2) ) + eps)) * (m1/(1-beta_1)) |
| 214 | + D_b1 = D_b1 - (learing_rate / (np.sqrt(v2 /(1-beta_2) ) + eps)) * (m2/(1-beta_1)) |
| 215 | + |
| 216 | + D_W2 = D_W2 - (learing_rate / (np.sqrt(v3 /(1-beta_2) ) + eps)) * (m3/(1-beta_1)) |
| 217 | + D_b2 = D_b2 - (learing_rate / (np.sqrt(v4 /(1-beta_2) ) + eps)) * (m4/(1-beta_1)) |
| 218 | + |
| 219 | + # Func: Forward Feed for G |
| 220 | + Z = np.random.uniform(-1., 1., size=[1, G_input]) |
| 221 | + Gl1 = Z.dot(G_W1) + G_b1 |
| 222 | + Gl1A = arctan(Gl1) |
| 223 | + Gl2 = Gl1A.dot(G_W2) + G_b2 |
| 224 | + Gl2A = ReLu(Gl2) |
| 225 | + Gl3 = Gl2A.dot(G_W3) + G_b3 |
| 226 | + Gl3A = arctan(Gl3) |
| 227 | + |
| 228 | + Gl4 = Gl3A.dot(G_W4) + G_b4 |
| 229 | + Gl4A = ReLu(Gl4) |
| 230 | + Gl5 = Gl4A.dot(G_W5) + G_b5 |
| 231 | + Gl5A = tanh(Gl5) |
| 232 | + Gl6 = Gl5A.dot(G_W6) + G_b6 |
| 233 | + Gl6A = ReLu(Gl6) |
| 234 | + Gl7 = Gl6A.dot(G_W7) + G_b7 |
| 235 | + |
| 236 | + current_fake_data = log(Gl7) |
| 237 | + |
| 238 | + Dl1 = current_fake_data.dot(D_W1) + D_b1 |
| 239 | + Dl1_A = ReLu(Dl1) |
| 240 | + Dl2 = Dl1_A.dot(D_W2) + D_b2 |
| 241 | + Dl2_A = log(Dl2) |
| 242 | + |
| 243 | + # Func: Cost G |
| 244 | + G_cost = -np.log(Dl2_A) |
| 245 | + |
| 246 | + # Func: Gradient |
| 247 | + grad_G_w7_part_1 = ((-1/Dl2_A) * d_log(Dl2).dot(D_W2.T) * (d_ReLu(Dl1))).dot(D_W1.T) |
| 248 | + grad_G_w7_part_2 = d_log(Gl7) |
| 249 | + grad_G_w7_part_3 = Gl6A |
| 250 | + grad_G_w7 = grad_G_w7_part_3.T.dot(grad_G_w7_part_1 * grad_G_w7_part_1) |
| 251 | + grad_G_b7 = grad_G_w7_part_1 * grad_G_w7_part_2 |
| 252 | + |
| 253 | + grad_G_w6_part_1 = (grad_G_w7_part_1 * grad_G_w7_part_2).dot(G_W7.T) |
| 254 | + grad_G_w6_part_2 = d_ReLu(Gl6) |
| 255 | + grad_G_w6_part_3 = Gl5A |
| 256 | + grad_G_w6 = grad_G_w6_part_3.T.dot(grad_G_w6_part_1 * grad_G_w6_part_2) |
| 257 | + grad_G_b6 = (grad_G_w6_part_1 * grad_G_w6_part_2) |
| 258 | + |
| 259 | + grad_G_w5_part_1 = (grad_G_w6_part_1 * grad_G_w6_part_2).dot(G_W6.T) |
| 260 | + grad_G_w5_part_2 = d_tanh(Gl5) |
| 261 | + grad_G_w5_part_3 = Gl4A |
| 262 | + grad_G_w5 = grad_G_w5_part_3.T.dot(grad_G_w5_part_1 * grad_G_w5_part_2) |
| 263 | + grad_G_b5 = (grad_G_w5_part_1 * grad_G_w5_part_2) |
| 264 | + |
| 265 | + grad_G_w4_part_1 = (grad_G_w5_part_1 * grad_G_w5_part_2).dot(G_W5.T) |
| 266 | + grad_G_w4_part_2 = d_ReLu(Gl4) |
| 267 | + grad_G_w4_part_3 = Gl3A |
| 268 | + grad_G_w4 = grad_G_w4_part_3.T.dot(grad_G_w4_part_1 * grad_G_w4_part_2) |
| 269 | + grad_G_b4 = (grad_G_w4_part_1 * grad_G_w4_part_2) |
| 270 | + |
| 271 | + grad_G_w3_part_1 = (grad_G_w4_part_1 * grad_G_w4_part_2).dot(G_W4.T) |
| 272 | + grad_G_w3_part_2 = d_arctan(Gl3) |
| 273 | + grad_G_w3_part_3 = Gl2A |
| 274 | + grad_G_w3 = grad_G_w3_part_3.T.dot(grad_G_w3_part_1 * grad_G_w3_part_2) |
| 275 | + grad_G_b3 = (grad_G_w3_part_1 * grad_G_w3_part_2) |
| 276 | + |
| 277 | + grad_G_w2_part_1 = (grad_G_w3_part_1 * grad_G_w3_part_2).dot(G_W3.T) |
| 278 | + grad_G_w2_part_2 = d_ReLu(Gl2) |
| 279 | + grad_G_w2_part_3 = Gl1A |
| 280 | + grad_G_w2 = grad_G_w2_part_3.T.dot(grad_G_w2_part_1 * grad_G_w2_part_2) |
| 281 | + grad_G_b2 = (grad_G_w2_part_1 * grad_G_w2_part_2) |
| 282 | + |
| 283 | + grad_G_w1_part_1 = (grad_G_w2_part_1 * grad_G_w2_part_2).dot(G_W2.T) |
| 284 | + grad_G_w1_part_2 = d_arctan(Gl1) |
| 285 | + grad_G_w1_part_3 = Z |
| 286 | + grad_G_w1 = grad_G_w1_part_3.T.dot(grad_G_w1_part_1 * grad_G_w1_part_2) |
| 287 | + grad_G_b1 = grad_G_w1_part_1 * grad_G_w1_part_2 |
| 288 | + |
| 289 | + # ---- Update Gradient ---- |
| 290 | + m5 = beta_1 * m5 + (1 - beta_1) * grad_G_w1 |
| 291 | + v5 = beta_2 * v5 + (1 - beta_2) * grad_G_w1 ** 2 |
| 292 | + |
| 293 | + m6 = beta_1 * m6 + (1 - beta_1) * grad_G_b1 |
| 294 | + v6 = beta_2 * v6 + (1 - beta_2) * grad_G_b1 ** 2 |
| 295 | + |
| 296 | + m7 = beta_1 * m7 + (1 - beta_1) * grad_G_w2 |
| 297 | + v7 = beta_2 * v7 + (1 - beta_2) * grad_G_w2 ** 2 |
| 298 | + |
| 299 | + m8 = beta_1 * m8 + (1 - beta_1) * grad_G_b2 |
| 300 | + v8 = beta_2 * v8 + (1 - beta_2) * grad_G_b2 ** 2 |
| 301 | + |
| 302 | + m9 = beta_1 * m9 + (1 - beta_1) * grad_G_w3 |
| 303 | + v9 = beta_2 * v9 + (1 - beta_2) * grad_G_w3 ** 2 |
| 304 | + |
| 305 | + m10 = beta_1 * m10 + (1 - beta_1) * grad_G_b3 |
| 306 | + v10 = beta_2 * v10 + (1 - beta_2) * grad_G_b3 ** 2 |
| 307 | + |
| 308 | + m11 = beta_1 * m11 + (1 - beta_1) * grad_G_w4 |
| 309 | + v11 = beta_2 * v11 + (1 - beta_2) * grad_G_w4 ** 2 |
| 310 | + |
| 311 | + m12 = beta_1 * m12 + (1 - beta_1) * grad_G_b4 |
| 312 | + v12 = beta_2 * v12 + (1 - beta_2) * grad_G_b4 ** 2 |
| 313 | + |
| 314 | + m13 = beta_1 * m13 + (1 - beta_1) * grad_G_w5 |
| 315 | + v13 = beta_2 * v13 + (1 - beta_2) * grad_G_w5 ** 2 |
| 316 | + |
| 317 | + m14 = beta_1 * m14 + (1 - beta_1) * grad_G_b5 |
| 318 | + v14 = beta_2 * v14 + (1 - beta_2) * grad_G_b5 ** 2 |
| 319 | + |
| 320 | + m15 = beta_1 * m15 + (1 - beta_1) * grad_G_w6 |
| 321 | + v15 = beta_2 * v15 + (1 - beta_2) * grad_G_w6 ** 2 |
| 322 | + |
| 323 | + m16 = beta_1 * m16 + (1 - beta_1) * grad_G_b6 |
| 324 | + v16 = beta_2 * v16 + (1 - beta_2) * grad_G_b6 ** 2 |
| 325 | + |
| 326 | + m17 = beta_1 * m17 + (1 - beta_1) * grad_G_w7 |
| 327 | + v17 = beta_2 * v17 + (1 - beta_2) * grad_G_w7 ** 2 |
| 328 | + |
| 329 | + m18 = beta_1 * m18 + (1 - beta_1) * grad_G_b7 |
| 330 | + v18 = beta_2 * v18 + (1 - beta_2) * grad_G_b7 ** 2 |
| 331 | + |
| 332 | + G_W1 = G_W1 - (learing_rate / (np.sqrt(v5 /(1-beta_2) ) + eps)) * (m5/(1-beta_1)) |
| 333 | + G_b1 = G_b1 - (learing_rate / (np.sqrt(v6 /(1-beta_2) ) + eps)) * (m6/(1-beta_1)) |
| 334 | + |
| 335 | + G_W2 = G_W2 - (learing_rate / (np.sqrt(v7 /(1-beta_2) ) + eps)) * (m7/(1-beta_1)) |
| 336 | + G_b2 = G_b2 - (learing_rate / (np.sqrt(v8 /(1-beta_2) ) + eps)) * (m8/(1-beta_1)) |
| 337 | + |
| 338 | + G_W3 = G_W3 - (learing_rate / (np.sqrt(v9 /(1-beta_2) ) + eps)) * (m9/(1-beta_1)) |
| 339 | + G_b3 = G_b3 - (learing_rate / (np.sqrt(v10 /(1-beta_2) ) + eps)) * (m10/(1-beta_1)) |
| 340 | + |
| 341 | + G_W4 = G_W4 - (learing_rate / (np.sqrt(v11 /(1-beta_2) ) + eps)) * (m11/(1-beta_1)) |
| 342 | + G_b4 = G_b4 - (learing_rate / (np.sqrt(v12 /(1-beta_2) ) + eps)) * (m12/(1-beta_1)) |
| 343 | + |
| 344 | + G_W5 = G_W5 - (learing_rate / (np.sqrt(v13 /(1-beta_2) ) + eps)) * (m13/(1-beta_1)) |
| 345 | + G_b5 = G_b5 - (learing_rate / (np.sqrt(v14 /(1-beta_2) ) + eps)) * (m14/(1-beta_1)) |
| 346 | + |
| 347 | + G_W6 = G_W6 - (learing_rate / (np.sqrt(v15 /(1-beta_2) ) + eps)) * (m15/(1-beta_1)) |
| 348 | + G_b6 = G_b6 - (learing_rate / (np.sqrt(v16 /(1-beta_2) ) + eps)) * (m16/(1-beta_1)) |
| 349 | + |
| 350 | + G_W7 = G_W7 - (learing_rate / (np.sqrt(v17 /(1-beta_2) ) + eps)) * (m17/(1-beta_1)) |
| 351 | + G_b7 = G_b7 - (learing_rate / (np.sqrt(v18 /(1-beta_2) ) + eps)) * (m18/(1-beta_1)) |
| 352 | + |
| 353 | + # --- Print Error ---- |
| 354 | + #print("Current Iter: ",iter, " Current D cost:",D_cost, " Current G cost: ", G_cost,end='\r') |
| 355 | + |
| 356 | + if iter == 0: |
| 357 | + learing_rate = learing_rate * 0.01 |
| 358 | + if iter == 40: |
| 359 | + learing_rate = learing_rate * 0.01 |
| 360 | + |
| 361 | + # ---- Print to Out put ---- |
| 362 | + if iter%10 == 0: |
| 363 | + |
| 364 | + print("Current Iter: ",iter, " Current D cost:",D_cost, " Current G cost: ", G_cost,end='\r') |
| 365 | + print('--------- Show Example Result See Tab Above ----------') |
| 366 | + print('--------- Wait for the image to load ---------') |
| 367 | + Z = np.random.uniform(-1., 1., size=[16, G_input]) |
| 368 | + |
| 369 | + Gl1 = Z.dot(G_W1) + G_b1 |
| 370 | + Gl1A = arctan(Gl1) |
| 371 | + Gl2 = Gl1A.dot(G_W2) + G_b2 |
| 372 | + Gl2A = ReLu(Gl2) |
| 373 | + Gl3 = Gl2A.dot(G_W3) + G_b3 |
| 374 | + Gl3A = arctan(Gl3) |
| 375 | + |
| 376 | + Gl4 = Gl3A.dot(G_W4) + G_b4 |
| 377 | + Gl4A = ReLu(Gl4) |
| 378 | + Gl5 = Gl4A.dot(G_W5) + G_b5 |
| 379 | + Gl5A = tanh(Gl5) |
| 380 | + Gl6 = Gl5A.dot(G_W6) + G_b6 |
| 381 | + Gl6A = ReLu(Gl6) |
| 382 | + Gl7 = Gl6A.dot(G_W7) + G_b7 |
| 383 | + |
| 384 | + current_fake_data = log(Gl7) |
| 385 | + |
| 386 | + fig = plot(current_fake_data) |
| 387 | + fig.savefig('Click_Me_{}.png'.format(str(iter).zfill(3)+"_Ginput_"+str(G_input)+ \ |
| 388 | + "_hiddenone"+str(hidden_input) + "_hiddentwo"+str(hidden_input2) + "_LR_" + str(learing_rate) |
| 389 | + ), bbox_inches='tight') |
| 390 | +#for complete explanation visit https://towardsdatascience.com/only-numpy-implementing-gan-general-adversarial-networks-and-adam-optimizer-using-numpy-with-2a7e4e032021 |
| 391 | +# -- end code -- |
0 commit comments