2017-08-15 134 views
0

我有与keras模型张量流问题。Tensorflow keras模型无法预测

我的目的是预测USD/TRY价格在接下来的5天,如果它提出了“will_raise_5_s”必须是1,如果它不会提高“will_raise_5_s”值为0

所以,我有14维阵列和0或1作为预测值。

所以我为此创建了一个模型,但是这个模型并没有学习。损失和val_acc从不改变。

我看到了这一点,把每个时期

loss: 7.5000 - acc: 0.5347 - val_loss: 6.5712 - val_acc: 0.5923 

这里是我的数据模型:https://api.myjson.com/bins/12qaq1

这里是我的代码:

import urllib 
import json 
import pandas as pd 
import stockstats as sdf 
import numpy as np 

def download_data(): 

    with open('data.json', 'r') as 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 
from keras.layers import Dense, Activation, Dropout 
from keras.models import Sequential 
from 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 is 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) 

回答

0

请看看到Learning_rate:LR = 1看起来不正常恕我直言。我不确定这种情况,但以我的经验:当模型停止学习时,这意味着lr太高。尝试像0.01 - 1e-5。希望这可以帮助。

当模型停止学习时,您也可以使用Keras回调来处理学习速度(请参阅文档)。

+0

sgd优化器没有使用,该代码是垃圾,我使用的是adam优化器 – fobus