Ошибка ввода финансовой нейронной сети Keras: ожидаемые 4 измерения, полученная форма ввода (1172, 1, 5)

Это код, который я написал для прогнозирования колебаний фондового рынка в исторических данных Facebook. Я использую нейронную сеть Keras, а данные берутся из Quandl. Программа использует информацию, полученную из исторической финансовой базы данных, на которую ранее ссылались, для обучения нейронной сети прогнозированию цен на акции с компонентами, полученными из сообщений, автором которых является Майкл Гроган (MGCodesAndStats). Программа ниже:

import tensorflow as tf
import keras
import numpy as np
import quandl
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import pandas as pd
import sklearn
import math

df = quandl.get("WIKI/FB", api_key = '_msxC6xspj2ddytz7-4u')
print(df)

df = df[['Adj. Close']]

previous = 1

def create_dataset(df, previous):
    dataX, dataY = [], []
    for i in range(len(df)-previous-1):
        a = df[i:(i+previous), 0]
        dataX.append(a)
        dataY.append(df[i + previous, 0])
    return np.array(dataX), np.array(dataY)

scaler = sklearn.preprocessing.MinMaxScaler(feature_range=(0, 1))
df = scaler.fit_transform(df)
print(df)

train_size = math.ceil(len(df) * 0.8)

train, val = df[0:train_size,:], df[train_size:len(df),:]

X_train, Y_train = create_dataset(train, previous)

print(X_train)
print(Y_train)

X_val, Y_val = create_dataset(val, previous)

X_train = np.reshape(X_train, (X_train.shape[0], 1, X_train.shape[1]))
X_val = np.reshape(X_val, (X_val.shape[0], 1, X_val.shape[1]))

model = keras.models.Sequential() 
model.add(keras.layers.Dense(units = 64, activation = 'relu', input_shape = (1172, 1, 5)))
model.add(keras.layers.Dense(units = 1, activation = 'linear'))
model.compile(loss='mean_absolute_error', 
              optimizer='adam', 
              metrics=['accuracy'])

model.fit(X_train, Y_train, epochs=8)

Однако, несмотря на то, что форма информации, предоставляемой нейронной сети, указана, программа выдала следующее сообщение об ошибке:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-3-d11b5f4c50ab> in <module>()
     53               metrics=['accuracy'])
     54 
---> 55 model.fit(X_train, Y_train, epochs=8)
     56 
     57 

2 frames
/usr/local/lib/python3.6/dist-packages/keras/engine/training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
    129                         ': expected ' + names[i] + ' to have ' +
    130                         str(len(shape)) + ' dimensions, but got array '
--> 131                         'with shape ' + str(data_shape))
    132                 if not check_batch_axis:
    133                     data_shape = data_shape[1:]

ValueError: Error when checking input: expected dense_1_input to have 4 dimensions, but got array with shape (1172, 1, 5)

Эта ошибка также возникает, несмотря на то, что форма массива, который должен оставаться предоставленным первому слою нейронной сети, указана полностью как имеющая форму (1172, 1, 5), форма, которую заявляет программа, не ожидал; есть ли немедленный способ, с помощью которого эта проблема может быть легко решена? Какова основная причина ошибки с указанной входной формой? Спасибо за помощь.


person DanS    schedule 26.01.2020    source источник


Ответы (1)


Вы совершаете классическую ошибку, включив размер выборки во входную форму, что, если, конечно, неверно, ваша входная форма должна быть:

model.add(keras.layers.Dense(units = 64, activation = 'relu', input_shape = (1, 5)))
person Dr. Snoopy    schedule 26.01.2020
comment
Спасибо за вашу помощь; однако при попытке сделать это я получил следующее сообщение об ошибке: - person DanS; 26.01.2020
comment
@DanS Добавьте слой Flatten между слоями Dense. - person Dr. Snoopy; 26.01.2020