(Tensorflow) lässt sich dieser Code vielleicht einfacher schreiben?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
greetings1
User
Beiträge: 51
Registriert: Donnerstag 22. Oktober 2020, 18:19

Ich bin gerade etwas unzufrieden mit den ganzen for-Schleifen...

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()
Wenn jemand eine Idee hat, dann gerne her damit, danke. :)
greetings1
User
Beiträge: 51
Registriert: Donnerstag 22. Oktober 2020, 18:19

Dieses Thema bitte löschen, hier geht es weiter viewtopic.php?f=30&t=51320
Antworten