python - Tensorflow keras model unable to predict -
i have problem tensorflow keras models.
my aim predicting usd/try price in next 5 day, if raises "will_raise_5_s" needs 1 , if won't raise "will_raise_5_s" value 0.
so, have 14 dimensional array , 0 or 1 predicted value.
so i'm creating model model doesn't learn. loss , val_acc never changes.
i see out put each epoch
loss: 7.5000 - acc: 0.5347 - val_loss: 6.5712 - val_acc: 0.5923 here data model : https://api.myjson.com/bins/12qaq1
here code :
import urllib import json import pandas pd import stockstats sdf import numpy np def download_data(): open('data.json', 'r') content_file: content = content_file.read() return content def reformat_data_for_stockstats(data): #boş verileri drop ediyoruz. data = data.drop('aort',axis=1).drop('hacimtl',axis=1).drop('sembolid',axis=1) data = data.rename(columns={ 'acilis':'open', 'dusuk':'low', 'hacimlot':'volume', 'kapanis':'close', 'yuksek':'high', 'tarih':'date' }) return data def apply_stock_to_data(data, stock): data['rsi_9'] = stock['rsi_9'] data['rsi_14'] = stock['rsi_14'] data['rsi_28'] = stock['rsi_28'] data['close_-2_s'] = stock['close_-2_s'] data['close_5_s'] = stock['close_5_s'] data['wr_10'] = stock['wr_10'] data['boll'] = stock['boll'] data['boll_ub'] = stock['boll_ub'] data['boll_lb'] = stock['boll_lb'] return data def apply_classification_data(data): #data['real_date'] = data.apply(lambda row: datetime.datetime.strptime(row['date']).date(), axis=1) data['yesterday_raised'] = data.apply(lambda row: 1 if row['close_-1_s'] > row['close_-2_s'] else 0, axis=1) data['today_raised'] = data.apply(lambda row: 1 if row['close'] > row['open'] else 0, axis=1) data['will_raise_5_s'] = data.apply(lambda row: 1 if row['close_5_s'] > row['close'] else 0, axis=1) data['boll_diff'] = data.apply(lambda row: (row['close'] - row['boll']) if (np.isnan(row['boll'])==false) else 0,axis=1) data['boll_ub_diff'] = data.apply(lambda row: (row['close'] - row['boll_ub']) if (np.isnan(row['boll_ub'])==false) else 0,axis=1) data['boll_lb_diff'] = data.apply(lambda row: (row['close'] - row['boll_lb']) if (np.isnan(row['boll_lb'])==false) else 0,axis=1) data['open_diff'] = data.apply(lambda row: (row['close'] - row['open']) if (np.isnan(row['open'])==false) else 0,axis=1) data['low_diff'] = data.apply(lambda row: (row['close'] - row['low']) if (np.isnan(row['low'])==false) else 0,axis=1) data['high_diff'] = data.apply(lambda row: (row['close'] - row['high']) if (np.isnan(row['high'])==false) else 0,axis=1) data['close_20_sma_diff'] = data.apply(lambda row: (row['close'] - row['close_20_sma']) if (np.isnan(row['close_20_sma'])==false) else 0,axis=1) return data def clear_non_required_fields(data): return data.\ drop('open',axis=1).\ drop('low',axis=1).\ drop('high',axis=1).\ drop('close',axis=1).\ drop('close_-1_s',axis=1).\ drop('close_-2_s',axis=1).\ drop('close_5_s',axis=1).\ drop('close_20_sma',axis=1).\ drop('close_20_mstd',axis=1).\ drop('rs_9',axis=1).\ drop('rs_14',axis=1).\ drop('rs_28',axis=1).\ drop('boll',axis=1).\ drop('boll_ub',axis=1).\ drop('boll_lb',axis=1).\ drop('volume',axis=1) def clear_not_valid_data(data): data = data.shift(-2) data = data[:-7] return data data = json.loads(download_data()) data = pd.dataframe.from_dict(data) data = reformat_data_for_stockstats(data) stock = sdf.stockdataframe.retype(data) data = apply_stock_to_data(data ,stock) data = apply_classification_data(data) data = clear_non_required_fields(data) data = clear_not_valid_data(data) girisx = np.array(data.drop('will_raise_5_s',axis=1)) cikisx = np.array(data['will_raise_5_s'].values.reshape(-1,1)) giris = girisx[:,0:13] cikis = cikisx import keras keras.layers import dense, activation, dropout keras.models import sequential keras.utils.np_utils import to_categorical model = sequential() model.add(dense(units=2048,input_dim=13)) model.add(activation('relu')) model.add(dropout(0.5)) model.add(dense(units=2048)) model.add(activation('relu')) model.add(dropout(0.5)) model.add(dense(units=2)) model.add(activation('softmax')) //this line garbage optimizer = keras.optimizers.sgd(lr=1) model.compile(optimizer='adam',loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(giris, cikis, epochs=50, batch_size=32, validation_split=0.20)
please take learning_rate: lr=1 doesn't looks normal imho. i'm not sure case, in experience: when model stops learning, means lr high. try 0.01 - 1e-5. hope, helps.
you can use keras callbacks dealing learning rate, when model stops learning (see docs).
Comments
Post a Comment