1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
import torch import torch.nn as nn
import pandas import matplotlib.pyplot as plt
class Discrimainator(nn.Module):
def __init__(self) -> None: super().__init__()
self.model=nn.Sequential( nn.Linear(4,3), nn.Sigmoid(), nn.Linear(3,1), nn.Sigmoid() )
self.loss_function=nn.MSELoss()
self.optimiser=torch.optim.SGD(self.parameters(),lr=0.01)
self.counter=0 self.progress=[]
def forward(self,inputs): return self.model(inputs)
def train(self,inputs,targets): outputs=self.forward(inputs) loss=self.loss_function(outputs,targets)
self.counter+=1 if(self.counter%10==0): self.progress.append(loss.item()) if(self.counter%10000==0): print("counter = ",self.counter)
self.optimiser.zero_grad() loss.backward() self.optimiser.step()
def plot_progress(self): df=pandas.DataFrame(self.progress,columns=['loss']) df.plot(ylim=(0,1.0),figsize=(16,8),alpha=0.1,marker='.',grid=True,yticks=(0,0.25,0.5))
class Generator(nn.Module): def __init__(self) -> None: super().__init__()
self.model=nn.Sequential( nn.Linear(1,3), nn.Sigmoid(), nn.Linear(3,4), nn.Sigmoid() )
self.optimiser=torch.optim.SGD(self.parameters(),lr=0.01)
self.counter=0 self.progress=[]
def forward(self,inputs): return self.model(inputs) def train(self,D,inputs,targets): g_output=self.forward(inputs) d_output=D.forward(g_output)
loss=D.loss_function(d_output,targets)
self.counter+=1 if(self.counter%10==0): self.progress.append(loss.item())
self.optimiser.zero_grad() loss.backward() self.optimiser.step()
def plot_progress(self): df=pandas.DataFrame(self.progress,columns=['loss']) df.plot(ylim=(0,1.0),figsize=(16,8),alpha=0.1,marker='.',grid=True,yticks=(0,0.25,0.5))
|