60 lines
1.7 KiB
Python
60 lines
1.7 KiB
Python
import os
|
|
import keras
|
|
import numpy as np
|
|
from keras.applications.imagenet_utils import decode_predictions
|
|
from classification_models.keras import Classifiers
|
|
|
|
class StockPredictor:
|
|
|
|
RESOURCE_PATH = None
|
|
stock2Vector = None
|
|
|
|
def __init__(self):
|
|
return
|
|
|
|
def getDataset(self, df):
|
|
VECTOR_SIZE = 299
|
|
TOTAL_X, TOTAL_Y = [], []
|
|
for key in df:
|
|
if key == "date":
|
|
continue
|
|
elif key == "label":
|
|
TOTAL_Y.append(df[key].tolist())
|
|
else:
|
|
TOTAL_X.append(df[key].tolist())
|
|
|
|
SIZE_WIDTH = len(TOTAL_X[0])
|
|
SIZE_HEIGHT = len(TOTAL_X)
|
|
X = []
|
|
for i in range(VECTOR_SIZE, SIZE_WIDTH):
|
|
temp_X, temp_Y = np.zeros((VECTOR_SIZE, VECTOR_SIZE)), np.zeros(0)
|
|
for j in range(SIZE_HEIGHT):
|
|
temp_X[j][0:VECTOR_SIZE] = TOTAL_X[j][i - VECTOR_SIZE:i]
|
|
temp_X = np.stack([temp_X, temp_X, temp_X], axis=-1)
|
|
X.append(temp_X)
|
|
|
|
X = np.asarray(X[len(X)-1])
|
|
|
|
return X
|
|
|
|
def predict(self, df, minmax_df, isRealTime=False):
|
|
X = self.getDataset(df)
|
|
|
|
# build model
|
|
n_classes = 3
|
|
Inceptionresnetv2, preprocess_input = Classifiers.get('inceptionresnetv2')
|
|
X = preprocess_input(X)
|
|
base_model = Inceptionresnetv2(input_shape=(299, 299, 3), include_top=False)
|
|
model = keras.models.Model(inputs=[base_model.input])
|
|
|
|
checkpoint_filename = os.path.join(self.RESOURCE_PATH, "model", "stock.ckpt")
|
|
model.load_weights(checkpoint_filename)
|
|
|
|
y = model.predict(X)
|
|
|
|
# result
|
|
print(decode_predictions(y))
|
|
|
|
|
|
return
|