Как я могу поставить ввод для ширины как 3 в Керасе? - PullRequest
0 голосов
/ 24 октября 2019

Я следую учебному пособию для RNN, они генерируют серию для width = 1, однако моя ширина ввода равна 3, data.HML, data.SMB, data.MKT, это все мои данные, data.Returnмое действительное значение, как я могу выразить это Keras?

ошибка здесь: tenorflow.python.framework.errors_impl.InvalidArgumentError: Несовместимые формы: [128,10,1] против [128,4]

Есть данные, одномерные

Есть ли какая-то проблема с базой данных, которую я создаю?

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

data=pd.read_csv("c://pp/11.csv")
series=np.array([data.HML,data.SMB, data.MKT, data.Return]).T

time=np.arange(276, dtype="float32")
split_time = 200
time_train = time[:split_time]
x_train = series[:split_time]
time_valid = time[split_time:]
x_valid = series[split_time:]

window_size = 10
batch_size = 10
shuffle_buffer_size = 20

def windowed_dataset(series, window_size, batch_size, shuffle_buffer):
  dataset = tf.data.Dataset.from_tensor_slices(series)
  dataset = dataset.window(window_size + 1, shift=1, drop_remainder=True)
  dataset = dataset.flat_map(lambda window: window.batch(window_size + 1))
  dataset = dataset.shuffle(shuffle_buffer).map(lambda window: (window[:-1], window[-1]))
  dataset = dataset.batch(batch_size).prefetch(1)
  return dataset

tf.keras.backend.clear_session()
tf.compat.v1.random.set_random_seed(51)
np.random.seed(51)

train_set = windowed_dataset(x_train, window_size, batch_size=128, shuffle_buffer=shuffle_buffer_size)


model = tf.keras.models.Sequential([
    tf.keras.layers.SimpleRNN(16,return_sequences=True,input_shape=[None,4]),
    tf.keras.layers.SimpleRNN(16,return_sequences=True),
    tf.keras.layers.Dense(1)
])

optimizer = tf.keras.optimizers.SGD(lr=1e-8, momentum=0.9)
model.compile(loss=tf.keras.losses.Huber(),
              optimizer=optimizer,
              metrics=["mae"])

history = model.fit(train_set, epochs=10)
...