• 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

  • 相关阅读:
    T2487 公交司机(搜索题)(小L的一生)
    T2485 汉诺塔升级版(普及)(递归)
    T2483 电梯(模拟题)
    将图片返回到前端
    session
    TCP协议
    socket
    断点调试
    解析字符串
    Cookie
  • 原文地址:https://www.cnblogs.com/zhangbojiangfeng/p/6362936.html
Copyright © 2020-2023  润新知