#python #numpy #deep-learning #lstm
Вопрос:
Я следовал учебнику на YouTube, чтобы изучить глубокое обучение (криптопрогнозирование), но меня засыпали ошибками. Я отладил довольно много из них, но так как я новичок в этом, я действительно не могу найти способ решить эту проблему.
Я получаю ошибку:
Ошибка индекса: индекс кортежа вне диапазона
on line
x_train = np.изменить форму(x_train, (x_train.форма[0], x_train.форма[1], 1))обратная трассировка ошибок: `Обратная трассировка (последний последний вызов): Файл «/Users/usr/PycharmProjects/cryptoPred/main.py», строка 35, в x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1)) Ошибка индекса: индекс кортежа вне диапазона` `
Полный код для контекста:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import pandas_datareader as web
import datetime as dt
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.layers import Dense, Dropout, LSTM
from tensorflow.keras.layers import Lambda
from tensorflow.keras.models import Sequential
# loading data from yahoo financial API
crypto_currency = 'BTC'
rl_currency = 'USD'
start = dt.datetime(2016, 1, 1)
end = dt.datetime(2021, 8, 10)
data = web.DataReader(f'{crypto_currency}-{rl_currency}', 'yahoo', start, end)
# preparing data
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data['Close'].values.reshape(-1, 1))
prediction_days = 60
x_train, y_train = np.array([]), np.array([])
print(x_train)
for x in range(prediction_days, len(scaled_data)):
x_train = np.append(x_train, scaled_data[x-prediction_days:x, 0])
y_train = np.append(y_train, scaled_data[x, 0])
x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1)) // error line
Комментарии:
1. Всегда делитесь полной обратной связью. ЛОЛ, вы либо изменили строку ошибки, либо вообще не включили ее. Это в основном ломало вопрос.
2. @AbhishekPrajapat Я не знал, я отредактировал сообщение
3. @AbhishekPrajapat не могли бы вы, пожалуйста, помочь
Ответ №1:
Тот np.append
ведет себя по-другому по сравнению со list.append
своим . Например, смотрите приведенный ниже код
# First What you are doing is like below
x_train, y_train = np.array([]), np.array([])
temp_list = [i for i in range(5)]
for x in range(1, 5):
x_train = np.append(x_train, temp_list, 0)
# After doing this the output is
'''
After doing this the x_train is
array([0., 1., 2., 3., 4., 0., 1., 2., 3., 4., 0., 1., 2., 3., 4., 0., 1.,
2., 3., 4.])
As you can see this is a 1D vector but what you want is a 2D matrix.
You should do it like below
'''
# Pre allocate space for faster editing
x_train = np.zeros((5, 5))
# Now change the value at idx as required
start = 0
for idx, x in enumerate(range(5)):
x_train[idx] = [i for i in range(start, start 5)]
start = 1a
# This will give the output of x_train as below
'''
array([[0., 1., 2., 3., 4.],
[1., 2., 3., 4., 5.],
[2., 3., 4., 5., 6.],
[3., 4., 5., 6., 7.],
[4., 5., 6., 7., 8.]])
'''
Теперь это 2D-матрица, и вы можете получить доступ к ее второму идентификатору.
Комментарии:
1. Я совершенно новичок в этом, поэтому я немного сбит с толку. Что такое
temp_list
как используется в первом коде для второго кода?2. Мне нужны были некоторые данные для добавления,
x_train
поэтому я просто создал некоторые произвольные данные.