Python 用于返回模拟的GANs

Python 用于返回模拟的GANs,python,keras,finance,generative-adversarial-network,Python,Keras,Finance,Generative Adversarial Network,我是python新手,尽管我已经理解了很多东西。我一直在阅读有关GANs及其在金融中用于模拟股票收益的应用的文章,该文给出了比蒙特卡罗分布更精确的模拟分布。我一直在努力编写一个有效的模型。暗中 from keras.layers import Input, Dense from keras.layers.advanced_activations import LeakyReLU from keras.models import Sequential, Model from keras.optim

我是python新手,尽管我已经理解了很多东西。我一直在阅读有关GANs及其在金融中用于模拟股票收益的应用的文章,该文给出了比蒙特卡罗分布更精确的模拟分布。我一直在努力编写一个有效的模型。暗中

from keras.layers import Input, Dense
from keras.layers.advanced_activations import LeakyReLU
from keras.models import Sequential, Model
from keras.optimizers import Adam
from sklearn.preprocessing import MinMaxScaler
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import yfinance as yf

gm = yf.download('GM',period='MAX')['Adj Close']
ret = np.log(gm/gm.shift()).dropna()
length = 25
scaler = MinMaxScaler()
ret_scaled = scaler.fit_transform(ret[:,np.newaxis])

def create_samples(dataset):
    samples = []
    
    for i in range(len(dataset)-length):
        samples.append(dataset[i:(i+length)])
    
    return np.array(samples)

samples = create_samples(ret)

optimizer = Adam(0.0002, 0.5)
noise_shape = (100,) 


def build_generator():
      
    generator = Sequential()
    generator.add(Dense(256, input_shape=noise_shape))
    generator.add(LeakyReLU(alpha=0.2))
    generator.add(Dense(512))
    generator.add(LeakyReLU(alpha=0.2))
    generator.add(Dense(1024))
    generator.add(LeakyReLU(alpha=0.2))
    generator.add(Dense(2048))
    generator.add(LeakyReLU(alpha=0.2))
    generator.add(Dense(25, activation='tanh'))
    generator.compile(loss='binary_crossentropy', optimizer=optimizer)

    return generator

def build_discriminator():

    discriminator = Sequential()
    discriminator.add(Dense(1024,input_dim=25))
    discriminator.add(LeakyReLU(alpha=0.2))
    discriminator.add(Dense(512))
    discriminator.add(LeakyReLU(alpha=0.2))
    discriminator.add(Dense(256))
    discriminator.add(LeakyReLU(alpha=0.2))
    discriminator.add(Dense(1, activation='sigmoid'))
    discriminator.compile(loss='binary_crossentropy',optimizer=optimizer)

    return discriminator

def build_gan(discriminator, generator):
    
    discriminator.trainable = False
    gan_input = Input(shape=(100,))
    x = generator(gan_input)
    gan_output = discriminator(x)
    gan = Model(inputs=gan_input, outputs=gan_output)
    gan.compile(loss='binary_crossentropy',optimizer=optimizer)
    
    return gan

def train(epochs=1, batch_size=10):

    X_train = samples
    batch_count = X_train.shape[0] / batch_size
    
    d_loss_logs_r = []
    d_loss_logs_f = []
    g_loss_logs = []
    
    generator = build_generator()
    discriminator = build_discriminator()
    gan = build_gan(discriminator,generator)
    
    for epoch in range(epochs):
        
        noise= np.random.normal(0,1,[batch_size,100])
        gen_imgs = generator.predict(noise)
        y_fake = np.zeros(batch_size)
        
        idx = np.random.randint(0, X_train.shape[0], batch_size)
        image_batch = X_train[idx]
        y_real = np.ones(batch_size)
        
        discriminator.trainable=True
        d_loss_real = discriminator.train_on_batch(image_batch, y_real)
        d_loss_fake = discriminator.train_on_batch(gen_imgs, y_fake)
        d_loss = 0.5 * np.add(d_loss_real, d_loss_fake) 
        
        noise= np.random.normal(0,1,[batch_size,100])
        y_gen = np.ones(batch_size)
        discriminator.trainable=False
        g_loss = gan.train_on_batch(noise, y_gen)
        
        d_loss_logs_r.append([epoch,d_loss_real])
        d_loss_logs_f.append([epoch,d_loss_fake])
        g_loss_logs.append([epoch,g_loss])
        
    d_loss_logs_r_a = np.array(d_loss_logs_r)
    d_loss_logs_f_a = np.array(d_loss_logs_f)
    g_loss_logs_a = np.array(g_loss_logs)
    
    return d_loss_logs_r_a, d_loss_logs_f_a, g_loss_logs_a

当我训练模型时,它只产生鉴别器和生成器的损失函数,但我如何也能得到模拟的回报(这样我就可以使用它们而不是蒙特卡罗的回报)


非常感谢

基本上,您的功能是创建一个gan,对其进行训练,然后只返回日志,因此实际上什么也不做。把发电机放在最后。你是说把发电机放回去吗?然后训练它,预测随机噪声,并绘制它?基本上你的函数是创建一个gan,训练它,只返回日志,因此实际上什么都不做。把发电机放在最后。你是说把发电机放回去吗?然后训练它,预测随机噪声,并绘制它?