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