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