import numpy as np
import torch
import torch.nn as nn
import torch.nn.functional as F
class Generator(nn.Module):
def __init__(self):
super(Generator, self).__init__()
self.fc1 = nn.Linear(256, 256)
self.fc2 = nn.Linear(256, 256)
self.fc3 = nn.Linear(256, 187)
self.rnn_layer = nn.LSTM(
input_size=187,
hidden_size=128,
num_layers=1,
bidirectional=True,
batch_first=True,
)
def forward(self, x):
x,_ = self.rnn_layer(x)
x = x.view(-1,256)
x = F.leaky_relu(self.fc1(x))
x = F.leaky_relu(self.fc2(x))
x = F.dropout(x, p=0.2)
x = self.fc3(x)
return x.unsqueeze(1)
class Discriminator(nn.Module):
def __init__(self):
super(Discriminator, self).__init__()
self.rnn_layer = nn.LSTM(
input_size=187,
hidden_size=256,
num_layers=1,
bidirectional=True,
batch_first=True,
)
self.fc1 = nn.Linear(512, 512)
self.fc2 = nn.Linear(512, 256)
self.fc3 = nn.Linear(256, 1)
def forward(self, x):
x,_ = self.rnn_layer(x)
x = x.view(-1, 512)
x = F.leaky_relu(self.fc1(x))
x = F.leaky_relu(self.fc2(x))
x = F.dropout(x, p=0.2)
x = torch.sigmoid(self.fc3(x))
return x