keras做DNN


輸入的數據集是10000行,31645列,其中前31644是特征,最后一列是標簽值。訓練集和測試集格式是一樣的。

特征值都是0,1形式,表示有還是沒有這個特征,標簽值是0,1形式,2分類。

import keras
import tensorflow as tf
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.layers import Embedding
from keras.layers import LSTM

#*******************#########################**********************************************************
#++++++++++++$$$$$***********************************************
#*****************************************************************************************

#帶標簽數據訓練
# Keras以Numpy數組作為輸入數據和標簽的數據類型。訓練模型一般使用fit函數

# for a single-input model with 2 classes (binary):
#dese后面的數字表示輸出的數據的維數,只有一個add,一個激活函數,認為網絡只有一層,那么dense后面的數字必須是要輸出的類別數,
#如果中間有幾層網絡,那么每一個dense后面試輸出為下一層的網絡神經元個數,但是最后一個add的dense后面的數字必須是輸出的類別數。

model = Sequential()
model.add(Dense(20, input_dim=31644, activation='sigmoid')) #把dense=1改為20
model.add(Dropout(0.5))
model.add(Dense(10,activation='relu')) #沒有input 表示隱層神經元
model.add(Dropout(0.5))
model.add(Dense(1,activation='sigmoid')) #輸出1維,表示是輸出層神經元

model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])

# generate dummy data
import numpy as np

def meke_sample(p):
   data=[]
   label=[]
   f_tain=open("/Users/zhangb/Desktop/學習研究/測試樣本/"+p,'r')
   for i in f_tain.readlines():
        lt=i.strip().split(',')
        data.append([int(x) for x in lt[0:-1]])
        label.append([int(lt[-1])])
    f_tain.close()
    data2=np.array(data)
    label2=np.array(label)
    return [data2,label2]

train_sample=meke_sample("train")
test_sample=meke_sample("test")

train_data=train_sample[0]
train_label=train_sample[1]

test_data=test_sample[0]
test_label=test_sample[1]


#定義混淆矩陣,左邊是預測值,上面是實際值 從左到右,從上到下 依次為a,b,c,d表示
def confusion_mat(test_label,predicts):
      test_calss=[int(x) for x in (list(test_label))] #傳入的是數組,轉成數字列表
      pred_class=[int(x) for x in (list(predicts))]
      a,b,c,d=0,0,0,0
      for i in range(len(test_calss)):
          if pred_class[i]==1 and test_calss[i]==1 :
                 a +=1
          elif pred_class[i]==1 and test_calss[i]==0 :
                 b +=1
          elif pred_class[i]==0 and test_calss[i]==1 :
                  c +=1
          elif pred_class[i]==0 and test_calss[i]==0 :
                  d +=1
      precision_1=a/(a+b+0.0)
      precision_0=d/(c+d+0.0)
      recall_1=a/(a+c+0.0)
      recall_0=d/(d+b+0.0)
      precision=(a+d)/(a+b+c+d+0.0)
      f1=2*precision_1*recall_1/(precision_1+recall_1)
      f0=2*precision_0*recall_0/(precision_0+recall_0)
      return [[a,b],[c,d],[precision_1,precision_0,recall_1,recall_0,precision,f1,f0]]

#
#print label
model.fit(train_data, train_label, nb_epoch=80, batch_size=32)
score = model.evaluate(test_data, test_label, batch_size=32) #得到損失值和准確率
print score
pred=model.predict_classes(test_data) #得到預測值 是數組
#print pred

confusion=confusion_mat(test_label,pred)
precision_1=confusion[2][0]
precision_0=confusion[2][1]
recall_1=confusion[2][2]
recall_0=confusion[2][3]
precision=confusion[2][4]
f1=confusion[2][5]
f0=confusion[2][6]
print confusion[0]
print confusion[1]
print 'precision_1 :'+ str(precision_1) + ' precision_0:' +str(precision_0)
print 'recall_1: '+str(recall_1)+' recall_0: '+ str(recall_0)
print 'precision:' +str(precision)
print 'f1: '+str(f1) + 'f0: '+str(f0)
#print ret
#print score


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM