Seite 1 von 1

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

Verfasst: Montag 15. Februar 2021, 11:25
von greetings1
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. :)

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

Verfasst: Dienstag 16. Februar 2021, 17:17
von greetings1
Dieses Thema bitte löschen, hier geht es weiter viewtopic.php?f=30&t=51320