<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    Python人工智能 | 十三.如何評價神經網絡、loss曲線圖繪制、圖像分類案例的F值計算

    VSole2022-01-19 17:05:08

    前一篇文章詳細講解了循環神經網絡RNN和長短期記憶網絡LSTM的原理知識,并采用TensorFlow實現手寫數字識別的RNN分類案例。本文將分享如何評價神經網絡,繪制訓練過程中的loss曲線,并結合圖像分類案例講解精確率、召回率和F值的計算過程。本文可以指導您撰寫簡單的深度學習論文,希望對您有所幫助。

    本專欄主要結合作者之前的博客、AI經驗、“莫煩”老師的視頻學習心得和相關文章及論文介紹,后面隨著深入會講解更多的Python人工智能案例及應用。基礎性文章,希望對您有所幫助,如果文章中存在錯誤或不足之處,還請海涵~作者作為人工智能的菜鳥,希望大家能與我在這一筆一劃的博客中成長起來,該專欄作者會用心撰寫,望對得起讀者,共勉!

    文章目錄:

    • 一. 神經網絡評價指標
    • 二.圖像分類loss曲線繪制
    • 1.數據集介紹
    • 2.訓練過程
    • 3.繪制loss和accuracy曲線
    • 三.圖像分類準確率、召回率、F值計算
    • 1.預測
    • 2.計算
    • 四.總結

    代碼下載地址(歡迎大家關注點贊):

    • https://github.com/eastmountyxz/
    • AI-for-TensorFlow
    • https://github.com/eastmountyxz/
    • AI-for-Keras
    學Python近八年,認識了很多大佬和朋友,感恩。作者的本意是幫助更多初學者入門,因此在github開源了所有代碼,也在公眾號同步更新。深知自己很菜,得拼命努力前行,編程也沒有什么捷徑,干就對了。希望未來能更透徹學習和撰寫文章,也能在讀博幾年里學會真正的獨立科研。同時非常感謝參考文獻中的大佬們的文章和分享。
    - https://blog.csdn.net/eastmount

    一. 神經網絡評價指標

    由于各種問題影響,會導致神經網絡的學習效率不高,或者干擾因素太多導致分析結果不理想。這些因素可能是數據問題、學習參數問題、算法效率問題等。

    那么,如何評價(Evaluate)神經網絡呢?我們可以通過一些指標對神經網絡進行評價,通過評價來改進神經網絡。評價神經網絡的方法和評價機器學習的方法大同小異,常見的包括誤差、準確率、R2 score、F值等。

    1.誤差(Error)

    先用誤差評價神經網絡,如下圖所示,隨著訓練時間增長,預測誤差會不斷減小,得到更為準確的答案,最后誤差會趨近于水平。


    2.正確率(Accuracy)

    正確率(精準度)是指預測正確結果與真實結果的比例,接近100%是最好的結果。例如,分類神經網絡100個樣本中有90個分類正確,則其預測正確率為90%。

    正確率對應的是誤檢率(false positve),假設100個樣本中誤撿個數為10,則誤檢率10%(10/100)。


    3.準確率、召回率和F值

    在機器學習和深度學習中,經常會用到準確率、召回率和F值評價算法。

    上圖為一個二分類的混淆矩陣(多分類同理,只需要把不屬于當前類的其他類都考慮為負例),表格中的四個參數說明:

    • True Positive(TP):正確預測出的正樣本個數(預測為正例,實際為正例)
    • False Positive(FP):錯誤預測出的正樣本個數(本來是負樣本,被預測成正樣本)
    • True Negative(TN):正確預測出的負樣本個數(預測為負例,實際為負例)
    • False Negative(FN):錯誤預測出的負樣本個數(本來是正樣本,被預測成負樣本)


    其中,TP和TN都是預測正確,FP和FN都是預測錯誤。

    正確率(accuracy): 它是最常見的評價指標,正確預測的樣本數占總預測樣本數的比值,它不考慮預測的樣本是正例還是負例。

    錯誤率(error rate): 又稱為誤檢率,錯誤率則與正確率相反,描述被分類器錯分的比例。對某一個實例來說,分對與分錯是互斥事件,所以 accuracy = 1 - error rate。

    準確率(precision): 準確率是精確性的度量,表示正確預測的正樣本數占所有預測為正樣本的數量的比值,也就是說所有預測為正樣本的樣本中有多少是真正的正樣本。注意,precision只關注預測為正樣本的部分,而accuracy考慮全部樣本。

    召回率(recall): 又稱為查全率,是覆蓋面的度量,表示正確預測的正樣本數占真實正樣本總數的比值,也就是能從這些樣本中能夠正確找出多少個正樣本。

    F值(F-score): 有時候precision和recall指標會存在矛盾的現象,此時就需要調用F-score或F-measure指標,它是precision和recall的調和平均值,能夠均衡的評價算法。在公式中,precision和recall任何一個數值減小,F-score都會減小;反之亦然。

    靈敏度(sensitive): 表示所有正例中被分對的比例,衡量了分類器對正例的識別能力。

    特效度(specificity): 表示所有負例中被分對的比例,衡量了分類器對負例的識別能力。

    ROC和AUC是評價分類器的指標,這部分后續文章作深入分享。


    4.R2 Score

    前面講解了分類和聚類問題的評價,那如果是回歸問題呢?又如何評價連續值的精準度呢?這里我們使用MSE、MAE、R2 Score等值來衡量。其基本思想是:測試數據集中的點,距離模型的平均距離越小,該模型越精確。

    在評價回歸模型時,sklearn中提供了四種評價尺度,分別為mean_squared_error、mean_absolute_error、explained_variance_score 和 r2_score。

    (1) 均方差(mean_squared_error):

    (2) 平均絕對值誤差(mean_absolute_error):

    (3) 可釋方差得分(explained_variance_score):

    (4) 中值絕對誤差(Median absolute error)

    (5) R2決定系數(擬合優度)

    模型越好:r2→1,模型越差:r2→0。

    Sklearn代碼調用如下:

    from sklearn.metrics import r2_score
     
    y_true = [1,2,4]
    y_pred = [1.3,2.5,3.7]
    r2_score(y_true,y_pred)
    

    5.交叉驗證

    神經網絡中有很多參數,我們怎么確定哪些參數能更有效解決現有問題呢?這時候交叉驗證是最好的途徑。交叉驗證不僅可以用于神經網絡調參,還可以用于其他機器學習的調參。例如:X軸為學習率(Learning rate)、神經網絡層數(N-layers),Y軸為Error或精確度,不同神經層數對應的誤差值或精準度也不同。

    由于神經層數目越多,計算機消耗的時間也會增加,所以只需要找到滿足誤差要求又能節約時間的層結構即可。例如,當誤差在0.005以下時都能接收時,則采用30層(N-layers=30)的結構即可。


    二.圖像分類loss曲線繪制

    我們在閱讀論文或實踐項目中,可能會看到很多評價神經網絡訓練的曲線,當神經網絡訓練好了,我們才用它來進行預測及分析。前面第五篇文章Tensorboard也講解了可視化曲線的繪制方法,而這部分將采用最原始的方法告訴大家loss曲線和accuracy曲線如何跟隨神經網絡迭代次數變化的,所生成的圖是可以直接應用到我們論文中的。希望對您有所幫助~

    1.數據集介紹

    首先,實驗所采用的數據集為Sort_1000pics數據集,該數據集包含了1000張圖片,總共分為10大類,分別是人(第0類)、沙灘(第1類)、建筑(第2類)、大卡車(第3類)、恐龍(第4類)、大象(第5類)、花朵(第6類)、馬(第7類)、山峰(第8類)和食品(第9類),每類100張。如圖所示。

    接著將所有各類圖像按照對應的類標劃分至“0”至“9”命名的文件夾中,如圖所示,每個文件夾中均包含了100張圖像,對應同一類別。

    比如,文件夾名稱為“6”中包含了100張花的圖像,如下圖所示。


    2.訓練過程

    接著是圖像分類的CNN代碼,這里就不再介紹了,請參考前面的文章和詳細注釋。

    完整代碼:

    # -*- coding: utf-8 -*-
    """
    Created on Tue Jan  7 13:39:19 2020
    @author: xiuzhang Eastmount CSDN
    """
    import os
    import glob
    import cv2
    import numpy as np
    import tensorflow as tf
    # 定義圖片路徑
    path = 'photo/'
    #---------------------------------第一步 讀取圖像-----------------------------------
    def read_img(path):
        cate = [path + x for x in os.listdir(path) if os.path.isdir(path + x)]
        imgs = []
        labels = []
        fpath = []
        for idx, folder in enumerate(cate):
            # 遍歷整個目錄判斷每個文件是不是符合
            for im in glob.glob(folder + '/*.jpg'):
                #print('reading the images:%s' % (im))
                img = cv2.imread(im)             #調用opencv庫讀取像素點
                img = cv2.resize(img, (32, 32))  #圖像像素大小一致
                imgs.append(img)                 #圖像數據
                labels.append(idx)               #圖像類標
                fpath.append(path+im)            #圖像路徑名
                #print(path+im, idx)
        return np.asarray(fpath, np.string_), np.asarray(imgs, np.float32), np.asarray(labels, np.int32)
    # 讀取圖像
    fpaths, data, label = read_img(path)
    print(data.shape)  # (1000, 256, 256, 3)
    # 計算有多少類圖片
    num_classes = len(set(label))
    print(num_classes)
    # 生成等差數列隨機調整圖像順序
    num_example = data.shape[0]
    arr = np.arange(num_example)
    np.random.shuffle(arr)
    data = data[arr]
    label = label[arr]
    fpaths = fpaths[arr]
    # 拆分訓練集和測試集 80%訓練集 20%測試集
    ratio = 0.8
    s = np.int(num_example * ratio)
    x_train = data[:s]
    y_train = label[:s]
    fpaths_train = fpaths[:s] 
    x_val = data[s:]
    y_val = label[s:]
    fpaths_test = fpaths[s:] 
    print(len(x_train),len(y_train),len(x_val),len(y_val)) #800 800 200 200
    print(y_val)
    #---------------------------------第二步 建立神經網絡-----------------------------------
    # 定義Placeholder
    xs = tf.placeholder(tf.float32, [None, 32, 32, 3])  #每張圖片32*32*3個點
    ys = tf.placeholder(tf.int32, [None])               #每個樣本有1個輸出
    # 存放DropOut參數的容器 
    drop = tf.placeholder(tf.float32)                   #訓練時為0.25 測試時為0
    # 定義卷積層 conv0
    conv0 = tf.layers.conv2d(xs, 20, 5, activation=tf.nn.relu)    #20個卷積核 卷積核大小為5 Relu激活
    # 定義max-pooling層 pool0
    pool0 = tf.layers.max_pooling2d(conv0, [2, 2], [2, 2])        #pooling窗口為2x2 步長為2x2
    print("Layer0:", conv0, pool0)
     
    # 定義卷積層 conv1
    conv1 = tf.layers.conv2d(pool0, 40, 4, activation=tf.nn.relu) #40個卷積核 卷積核大小為4 Relu激活
    # 定義max-pooling層 pool1
    pool1 = tf.layers.max_pooling2d(conv1, [2, 2], [2, 2])        #pooling窗口為2x2 步長為2x2
    print("Layer1:", conv1, pool1)
    # 將3維特征轉換為1維向量
    flatten = tf.layers.flatten(pool1)
    # 全連接層 轉換為長度為400的特征向量
    fc = tf.layers.dense(flatten, 400, activation=tf.nn.relu)
    print("Layer2:", fc)
    # 加上DropOut防止過擬合
    dropout_fc = tf.layers.dropout(fc, drop)
    # 未激活的輸出層
    logits = tf.layers.dense(dropout_fc, num_classes)
    print("Output:", logits)
    # 定義輸出結果
    predicted_labels = tf.arg_max(logits, 1)
    #---------------------------------第三步 定義損失函數和優化器---------------------------------
    # 利用交叉熵定義損失
    losses = tf.nn.softmax_cross_entropy_with_logits(
            labels = tf.one_hot(ys, num_classes),       #將input轉化為one-hot類型數據輸出
            logits = logits)
    # 平均損失
    mean_loss = tf.reduce_mean(losses)
    # 定義優化器 學習效率設置為0.0001
    optimizer = tf.train.AdamOptimizer(learning_rate=1e-4).minimize(losses)
    #------------------------------------第四步 模型訓練和預測-----------------------------------
    # 用于保存和載入模型
    saver = tf.train.Saver()
    # 訓練或預測
    train = True
    # 模型文件路徑
    model_path = "model/image_model"
    with tf.Session() as sess:
        if train:
            print("訓練模式")
            # 訓練初始化參數
            sess.run(tf.global_variables_initializer())
            # 定義輸入和Label以填充容器 訓練時dropout為0.25
            train_feed_dict = {
                    xs: x_train,
                    ys: y_train,
                    drop: 0.25
            }
            # 訓練學習1000次
            for step in range(1000):
                _, mean_loss_val = sess.run([optimizer, mean_loss], feed_dict=train_feed_dict)
                if step % 20 == 0:  #每隔20次輸出一次結果
                    # 訓練準確率
                    pre = sess.run(predicted_labels, feed_dict=train_feed_dict)
                    accuracy = 1.0*sum(y_train==pre) / len(pre)
                    print("{},{},{}".format(step, mean_loss_val,accuracy))
            # 保存模型
            saver.save(sess, model_path)
            print("訓練結束,保存模型到{}".format(model_path))
        else:
            print("測試模式")
            # 測試載入參數
            saver.restore(sess, model_path)
            print("從{}載入模型".format(model_path))
            # label和名稱的對照關系
            label_name_dict = {
                0: "人類",
                1: "沙灘",
                2: "建筑",
                3: "公交",
                4: "恐龍",
                5: "大象",
                6: "花朵",
                7: "野馬",
                8: "雪山",
                9: "美食"
            }
            # 定義輸入和Label以填充容器 測試時dropout為0
            test_feed_dict = {
                xs: x_val,
                ys: y_val,
                drop: 0
            }
            
            # 真實label與模型預測label
            predicted_labels_val = sess.run(predicted_labels, feed_dict=test_feed_dict)
            for fpath, real_label, predicted_label in zip(fpaths_test, y_val, predicted_labels_val):
                # 將label id轉換為label名
                real_label_name = label_name_dict[real_label]
                predicted_label_name = label_name_dict[predicted_label]
                print("{}\t{} => {}".format(fpath, real_label_name, predicted_label_name))
            # 評價結果
            print("正確預測個數:", sum(y_val==predicted_labels_val))
            print("準確度為:", 1.0*sum(y_val==predicted_labels_val) / len(y_val))
            k = 0
            while k < len(y_val):
                print(y_val[k], predicted_labels_val[k])
                k = k + 1
    

    當train=True時,訓練過程會輸出誤差和accuracy值,核心代碼如下:

    輸出結果如下所示,分別代表訓練次數、整體誤差和正確率。我們將其復制到TXT文件中,再重新寫一個py代碼繪圖。

    (1000, 32, 32, 3)
    10
    800 800 200 200
    [4 4 3 0 0 0 8 3 8 6 7 1 7 7 9 0 4 7 0 6 0 7 7 0 9 5 4 3 5 1 2 2 8 2 8 5 1
     7 8 7 1 7 7 2 6 4 0 9 0 6 1 1 2 7 4 3 9 6 2 2 1 2 3 3 4 1 6 0 5 3 0 4 8 1
     8 1 6 5 9 3 6 9 8 4 2 7 2 9 2 0 3 3 0 8 6 5 0 4 4 2 7 2 4 4 3 5 9 6 8 0 9
     0 4 6 9 9 3 5 0 9 8 1 4 1 8 5 3 2 6 5 1 9 0 2 1 9 9 3 0 8 5 7 8 8 3 4 4 4
     0 5 6 2 8 1 5 5 8 9 7 2 0 8 6 1 5 8 9 9 2 8 2 6 0 7 8 0 2 1 9 0 4 3 1 9 0
     0 4 3 3 3 3 1 8 8 1 5 9 8 0 9]
     
    訓練模式
    0,62.20244216918945,0.12
    20,8.619616508483887,0.3625
    40,3.896609306335449,0.545
    ...
    940,0.0003522337938193232,1.0
    960,0.00033640244510024786,1.0
    980,0.00032152896164916456,1.0
    訓練結束,保存模型到model/image_model
    

    3.繪制loss和accuracy曲線

    首先讀取“train_data.txt”數據集,采用逗號連接,再繪制折線圖即可。

    import matplotlib.pyplot as plt
    from mpl_toolkits.axes_grid1 import host_subplot
    # 讀取文件數據
    fp = open('train_data.txt', 'r')
    # 迭代次數 整體誤差 正確率
    train_iterations = []
    train_loss = []
    test_accuracy = []
    # 解析數據
    for line in fp.readlines():
        con = line.strip('').split(',')
        print(con)
        train_iterations.append(int(con[0]))
        train_loss.append(float(con[1]))
        test_accuracy.append(float(con[2]))
    # 繪制曲線圖
    host = host_subplot(111)
    plt.subplots_adjust(right=0.8) # ajust the right boundary of the plot window
    par1 = host.twinx()
    # 設置類標
    host.set_xlabel("iterations")
    host.set_ylabel("loss")
    par1.set_ylabel("validation accuracy")
    # 繪制曲線
    p1, = host.plot(train_iterations, train_loss, "b-", label="training loss")
    p2, = host.plot(train_iterations, train_loss, ".") #曲線點
    p3, = par1.plot(train_iterations, test_accuracy, label="validation accuracy")
    p4, = par1.plot(train_iterations, test_accuracy, "1")
    # 設置圖標
    # 1->rightup corner, 2->leftup corner, 3->leftdown corner
    # 4->rightdown corner, 5->rightmid ...
    host.legend(loc=5)
    # 設置顏色
    host.axis["left"].label.set_color(p1.get_color())
    par1.axis["right"].label.set_color(p3.get_color())
    # 設置范圍
    host.set_xlim([-10, 1000])
    plt.draw()
    plt.show()
    

    輸出結果如下圖所示,可以看到整體誤差趨近于0.0003擬合,正確率朝著100%接近,整個神經網絡的學習效率不錯。

    三.準確率、召回率、F值計算

    1.預測

    接下來將CNN神經網絡中的train標記變量設置為False,使用上一步訓練好的神經網絡進行預測。核心代碼如下:

    輸出結果如下所示,其中在200測試樣本中,正確預測個數181,正確度為0.905。

    (1000, 32, 32, 3)
    10
    800 800 200 200
    [9 4 8 7 0 7 5 7 1 4 9 3 0 5 8 0 0 2 5 8 7 4 7 8 8 9 4 1 6 7 8 4 8 4 9 9 6
     1 6 7 9 8 6 3 1 8 7 8 0 4 6 9 8 5 2 6 0 0 1 9 9 6 8 1 5 9 1 1 6 0 1 7 2 1
     7 1 8 7 9 7 7 5 1 0 6 0 1 5 5 0 7 5 8 6 7 7 5 0 9 7 8 9 7 3 0 9 2 4 7 9 1
     7 0 2 2 5 6 5 1 0 9 5 9 7 0 6 2 5 4 4 2 6 8 6 2 5 7 1 5 0 0 4 5 7 9 3 5 5
     4 6 1 3 9 9 7 5 6 9 2 3 3 2 4 1 4 8 2 7 3 4 3 9 1 5 7 6 4 2 6 4 0 0 4 5 1
     7 2 4 6 6 2 4 1 7 5 0 6 8 3 7]
     
    測試模式
    INFO:tensorflow:Restoring parameters from model/image_model
    從model/image_model載入模型
    b'photo/photo/9\\960.jpg'       美食 => 美食
    b'photo/photo/4\\414.jpg'       恐龍 => 恐龍
    b'photo/photo/8\\809.jpg'       雪山 => 雪山
    b'photo/photo/7\\745.jpg'       野馬 => 大象
    b'photo/photo/0\\12.jpg'        人類 => 人類
    ...
    b'photo/photo/0\\53.jpg'        人類 => 人類
    b'photo/photo/6\\658.jpg'       花朵 => 花朵
    b'photo/photo/8\\850.jpg'       雪山 => 雪山
    b'photo/photo/3\\318.jpg'       公交 => 美食
    b'photo/photo/7\\796.jpg'       野馬 => 野馬
    正確預測個數: 181
    準確度為: 0.905
    9 9
    4 4
    8 8
    ...
    6 6
    8 8
    3 9
    7 7
    

    2.計算

    同樣,我們將預測的結果和正確的類標復制到TXT文件中,然后計算其準確率、召回率、F值。基本步驟:

    • 讀取數據集
    • 分別計算0-9類(共10類)不同類標正確識別的個數和總識別的個數
    • 按照第一部分的公式計算準確率、召回率和F值
    • 調用matplotlib庫繪制對比柱狀圖


    比如,測試集實際有20張人類圖片,預測出18張人類圖片,正確的類標14,則準確率為14/18,召回率為14/20。

    最終繪制圖形如下:

    完整代碼如下:

    # -*- coding: utf-8 -*-
    """
    Created on Tue Jan  7 13:39:19 2020
    @author: xiuzhang Eastmount CSDN
    """
    import numpy as np
    import matplotlib.pyplot as plt
    #--------------------------------------------------------------------------
    # 第一部分 計算準確率 召回率 F值
    #--------------------------------------------------------------------------
    # 讀取文件數據
    fp = open('test_data.txt', 'r')
    # 迭代次數 整體誤差 正確率
    real = []
    pre = []
    # 解析數據
    for line in fp.readlines():
        con = line.strip('').split(' ')
        #print(con)
        real.append(int(con[0])) #真實類標
        pre.append(int(con[1]))  #預測類標
    # 計算各類結果 共10類圖片
    real_10 = list(range(0, 10))   #真實10個類標數量的統計
    pre_10 = list(range(0, 10))    #預測10個類標數量的統計
    right_10 = list(range(0, 10))  #預測正確的10個類標數量
    k = 0
    while k < len(real):
        v1 = int(real[k])
        v2 = int(pre[k])
        print(v1, v2)
        real_10[v1] = real_10[v1] + 1     # 計數
        pre_10[v2] = pre_10[v2] + 1       # 計數
        if v1==v2:
            right_10[v1] = right_10[v1] + 1
        k = k + 1
    print("統計各類數量")
    print(real_10, pre_10, right_10)
    # 準確率 = 正確數 / 預測數
    precision = list(range(0, 10))
    k = 0
    while k < len(real_10):
        value = right_10[k] * 1.0 / pre_10[k] 
        precision[k] = value
        k = k + 1
    print(precision)
    # 召回率 = 正確數 / 真實數
    recall = list(range(0, 10))
    k = 0
    while k < len(real_10):
        value = right_10[k] * 1.0 / real_10[k] 
        recall[k] = value
        k = k + 1
    print(recall)
       
    # F值 = 2*準確率*召回率/(準確率+召回率)
    f_measure = list(range(0, 10))
    k = 0
    while k < len(real_10):
        value = (2 * precision[k] * recall[k] * 1.0) / (precision[k] + recall[k])
        f_measure[k] = value
        k = k + 1
    print(f_measure)
    #--------------------------------------------------------------------------
    # 第二部分 繪制曲線
    #--------------------------------------------------------------------------
    # 設置類別
    n_groups = 10
    fig, ax = plt.subplots()
    index = np.arange(n_groups)
    bar_width = 0.2
     
    opacity = 0.4
    error_config = {'ecolor': '0.3'}
    #用來正常顯示中文標簽
    plt.rcParams['font.sans-serif']=['SimHei']
     
    # 繪制
    rects1 = ax.bar(index, precision, bar_width,
                    alpha=opacity, color='b',
                    error_kw=error_config,
                    label='precision')
     
    rects2 = ax.bar(index + bar_width, recall, bar_width,
                    alpha=opacity, color='m',
                    error_kw=error_config,
                    label='recall')
     
    rects3 = ax.bar(index + bar_width + bar_width, f_measure, bar_width,
                    alpha=opacity, color='r',
                    error_kw=error_config,
                    label='f_measure')
                
    # 設置標簽
    ax.set_xticks(index + 3 * bar_width / 3)
    ax.set_xticklabels(('0-人類', '1-沙灘', '2-建筑', '3-公交', '4-恐龍',
                        '5-大象', '6-花朵', '7-野馬', '8-雪山', '9-美食'))
    # 設置類標
    ax.legend()
    plt.xlabel("類標")
    plt.ylabel("評價")
    fig.tight_layout()
    plt.savefig('result.png', dpi=200)
    plt.show()
    

    輸出結果如下所示,讀者也可以嘗試直接復制下面的precision、recall、f-measure繪制圖形。

    統計各類數量
    [21, 22, 17, 13, 24, 28, 27, 36, 26, 31] 
    [19, 23, 18, 12, 24, 30, 29, 34, 25, 31] 
    [17, 19, 15, 11, 24, 26, 27, 34, 24, 29]
    [0.8947368421052632, 0.8260869565217391, 0.8333333333333334, 0.9166666666666666, 1.0, 
    0.8666666666666667, 0.9310344827586207, 1.0, 0.96, 0.9354838709677419]
    [0.8095238095238095, 0.8636363636363636, 0.8823529411764706, 0.8461538461538461, 1.0, 
    0.9285714285714286, 1.0, 0.9444444444444444, 0.9230769230769231, 0.9354838709677419]
    [0.8500000000000001, 0.8444444444444444, 0.8571428571428571, 0.8799999999999999, 1.0, 
    0.896551724137931, 0.9642857142857143, 0.9714285714285714, 0.9411764705882353, 0.9354838709677419]
    

    四.總結

    寫到這里,這篇文章就講解完畢,更多TensorFlow深度學習文章會繼續分享,接下來我們會分享RNN回歸、文本識別、圖像識別、語音識別等內容。如果讀者有什么想學習的,也可以私聊我,我去學習并應用到你的領域。

    最后,希望這篇基礎性文章對您有所幫助,如果文章中存在錯誤或不足之處,還請海涵~作為人工智能的菜鳥,我希望自己能不斷進步并深入,后續將它應用于圖像識別、網絡安全、對抗樣本等領域,指導大家撰寫簡單的學術論文,一起加油!

    神經網絡模型預測模型
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    針對現有的靜態代碼分析工具有較高的誤報率與漏報率,提出一種基于切片依賴圖(Slice Dependency Graph,SDG)的自動化漏洞檢測方法,將程序源代碼解析為包含數據依賴和控制依賴信息的切片依賴圖,然后使用圖神經網絡對切片依賴圖的結構進行表征學習,最后使用訓練的神經網絡模型預測待測程序源代碼中的漏洞。在 5 類常見缺陷分類(Common Weakness Enumeration,CWE)
    工業安全態勢感知通過采集工業網絡中的安全設備日志、網絡設備日志、工業控制系統日志、業務應用日志,利用平臺集成的安全分析模型,實時發現網絡中的威脅,并對分析的結果產生告警,但此類分析能力只局限于事中、事后,缺少事前預測的能力,因此工業安全態勢感知的終極目標是通過收集網絡源數據,實現攻擊預測,協助運營者提前落實防護策略,避免業務系統遭受攻擊造成經濟損失和惡劣的社會影響。
    測試結果表明,勒索病毒檢測器檢測準確率達到了 97%,勒索病毒家族分類器分類準確率達到了 94%。隨著網絡犯罪的組織化、規模化,隱匿行為攻擊的復雜化和商業化,目前,隱匿高危勒索病毒呈蔓延之勢。為了保證計算機網絡和計算機應用系統的正常運行,電力企業需要對隱匿高危勒索病毒的攻擊作出應對。對抗隱匿高危勒索病毒攻擊,保護用戶數據的關鍵措施在于預防,即在勒索軟件攻入受害者主機但尚未造成實質性破壞前及時檢測并攔截攻擊。
    電力工控系統是關系到電網安全穩定運行的重要領域。目前國網黑龍江電力有限公司已經建立起“安全分區、網絡專用、橫向隔離、縱向認證”的邊界安全防護體系。但在工控系統核心位置保護方面,還需考慮以下兩個問題:電力工控系統具有閉源特性,內部函數邏輯調用非開源;攻擊數據樣本極少,難以構建特征庫引擎。針對以上問題,從系統底層數據提取、運行狀態學習等方面開展研究,設計了涵蓋廠站、主站兩側的安全防御體系架構,為閉源電
    當前網絡入侵檢測大多使用人工特征,但是人工特征往往不能適應新型攻擊,重新設計人工特征又需要專家知識。對此,提出了一種算法,該算法從網絡流量數據中提取會話作為樣本,并將樣本送入兩個神經網絡,會話的一系列有時間順序的數據包視為一維序列送入門控循環單元,融合會話的一系列數據包視為二維圖像送入卷積神經網絡
    一.文本分類文本分類旨在對文本集按照一定的分類體系或標準進行自動分類標記,屬于一種基于分類體系的自動分類。牛亞峰老師將傳統的文本分類流程歸納如下圖所示。在傳統的文本分類中,基本上大部分機器學習方法都在文本分類領域有所應用。本文將采用詞向量、TFIDF兩種方式進行實驗。
    摘 要:互聯網開源信息處理是指從互聯網上的公開信息源獲取數據并分析處理,進而獲得有價值的開源信息的過程。為充分了解國外互聯網開源信息處理的研究現狀,從開源數據采集、預處理、信息分析、決策支撐、相關系統等角度對近年來國外有關研究進行梳理,總結現有研究存在的普遍性問題,對未來研究進行展望。
    近年來,隨著邊緣設備與邊緣應用的爆發式增加,近邊端的智能數據處理需求急劇增加。因此對DNN模型進行有效切分,利用邊緣與邊緣之間協同計算來共同承擔大規模DNN的訓練與推理計算任務成為了重要的研究內容。
    如何攻擊圖神經網絡
    2022-08-24 08:12:18
    目前,圖結構的數據被應用于各種安全敏感領域(例如惡意軟件分析,內存取證,欺詐檢測,藥物發現等),而隨著圖神經網絡的興起,研究人員嘗試將圖神經網絡應用于這類數據上實施分析,發現都能達到非常先進的水平。
    事實上,以 CPS 為基礎,到 2030 年,工業 4.0 預計將創造 15 萬億美元的全球 GDP 價值。違反保密規定會造成重大的經濟損失。總體而言,失去知識產權將增加制造業的財務損失。由于 3D 打印機用于實際制造和快速原型制作,因此泄露打印對象的信息將使對手獲得復制它所需的所有信息,從而給相關公司造成重大經濟損失。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类