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

Это код, который я написал для прогнозирования колебаний фондового рынка в исторических данных 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), форма, которую утверждает программа, не ожидается; Есть ли способ немедленного решения этой проблемы? Какова основная причина ошибки с заданной формой ввода? Спасибо за вашу помощь.

1 Ответ

1 голос
/ 26 января 2020

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

model.add(keras.layers.Dense(units = 64, activation = 'relu', input_shape = (1, 5)))
...