(Tensorflow) lässt sich dieser Code vielleicht einfacher schreiben?
Verfasst: Montag 15. Februar 2021, 11:25
Ich bin gerade etwas unzufrieden mit den ganzen for-Schleifen...
Wenn jemand eine Idee hat, dann gerne her damit, danke. 
Code: Alles auswählen
import numpy as np
import tensorflow as tf
from tensorflow import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Dropout
from sklearn.preprocessing import MinMaxScaler
import matplotlib.pyplot as plt
import sys
import random
import datetime
import matplotlib
data = []
with open("BTCUSDT_0.csv") as fp:
lines = fp.readlines()
for c, line in enumerate(lines):
x = line.split(";")
data.append((float(x[1]) + float(x[2])) / 2.0)
len0 = len(data)
for i in range(len0, len0 + 50):
data.append(data[len0 - 1])
data2 = []
for i in range(10):
temp = []
for j in range(i * 50, i * 50 + 100):
temp.append(data[j])
data2.append(temp)
sc_x = MinMaxScaler()
sc_y = MinMaxScaler()
train_data_x = sc_x.fit_transform(data2).reshape(-1, 1, 1)
train_data_y = []
for i in range(10):
for j in range(i * 50, i * 50 + 100):
train_data_y.append(j)
train_data_y = sc_y.fit_transform(np.reshape(train_data_y, (-1, 1)))
print(train_data_x.shape, train_data_y.shape)
units_c = 100
regressor = Sequential()
regressor.add(
LSTM(units=units_c, return_sequences=True, input_shape=(train_data_x.shape[1], 1))
)
regressor.add(Dropout(0.2))
regressor.add(LSTM(units=units_c, return_sequences=True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units=units_c, return_sequences=True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units=units_c))
regressor.add(Dropout(0.2))
regressor.add(Dense(units=1))
regressor.compile(optimizer="adam", loss="mean_squared_error")
regressor.fit(train_data_x, train_data_y, epochs=200, batch_size=16)
pre = regressor.predict(train_data_x)
pre = sc_x.inverse_transform(pre.reshape(-1, 100))
xs1 = []
for i in range(550):
xs1.append(data[i])
xs2 = []
for i in range(10):
for j in range(50):
xs2.append(pre[i][j])
for i in range(50, 100):
xs2.append(pre[-1][i])
nowy = datetime.datetime.now()
ys = []
for i in range(550):
ys.append(nowy + datetime.timedelta(0, 300 * (i - 500)))
dates = matplotlib.dates.date2num(ys)
print(len(xs1), len(xs2), len(ys))
plt.plot_date(dates, xs1, label="data", linestyle="solid")
plt.plot_date(dates, xs2, label="data2", linestyle="solid")
plt.legend()
plt.show()
