也許每個人出生的時候都以為這世界都是為他一個人而存在的,當他發現自己錯的時候,他便開始長大

少走瞭彎路,也就錯過瞭風景,無論如何,感謝經歷


更多關於Android安全的知識,可前往:https://blog.csdn.net/ananasorangey/category11955914.html

本篇文章轉載自公眾號[娜璋AI安全之傢]


前一篇文章詳細講解瞭循環神經網絡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:\n", 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:\n", conv1, pool1)

# 將3維特征轉換為1維向量
flatten = tf.layers.flatten(pool1)

# 全連接層 轉換為長度為400的特征向量
fc = tf.layers.dense(flatten, 400, activation=tf.nn.relu)
print("Layer2:\n", fc)

# 加上DropOut防止過擬合
dropout_fc = tf.layers.dropout(fc, drop)

# 未激活的輸出層
logits = tf.layers.dense(dropout_fc, num_classes)
print("Output:\n", 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('\n').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('\n').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回歸、文本識別、圖像識別、語音識別等內容。如果讀者有什麼想學習的,也可以私聊我,我去學習並應用到你的領域。

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

讀博不易,但深夜總喜歡擠時間寫上一篇文章,算是對自己這麼多年分享的鼓勵,也希望自己能堅持,感謝傢人的支持,小珞珞太可愛瞭。如果您也是從事Python數據分析、圖像處理、人工智能、網絡安全的朋友,我們可以深入探討,尤其是做研究的同學,共同進步~

前文分享(可以點擊喔):

  • 一.白話神經網絡和AI概念入門普及
  • 二.TensorFlow環境搭建、學習路線及入門案例
  • 三.TensorFlow基礎及一元直線預測案例
  • 四.TensorFlow基礎之Session、變量、傳入值和激勵函數
  • 五.TensorFlow創建回歸神經網絡及Optimizer優化器
  • 六.Tensorboard可視化基本用法及神經網絡繪制
  • 七.TensorFlow實現分類學習及MNIST手寫體識別案例
  • 八.什麼是過擬合及dropout解決神經網絡中的過擬合問題
  • 九.卷積神經網絡CNN原理詳解及TensorFlow編寫CNN
  • 十.Tensorflow+Opencv實現CNN自定義圖像分類案例及與機器學習KNN對比
  • 十一.Tensorflow如何保存神經網絡參數
  • 十二.循環神經網絡RNN和LSTM原理詳解及TensorFlow分類案例
  • 十三.如何評價神經網絡、loss曲線圖繪制、圖像分類案例的F值計算

天行健,君子以自強不息。
地勢坤,君子以厚德載物。

真誠地感謝您關註“娜璋之傢”公眾號,也希望我的文章能陪伴你成長,希望在技術路上不斷前行。文章如果對你有幫助、有感悟,就是對我最好的回報,且看且珍惜!再次感謝您的關註,也請幫忙宣傳下“娜璋之傢”,初來乍到,還請多指教。

(By:Eastmount 2022-01-19 夜於貴陽)


參考文獻:

  • [1] 岡薩雷斯著. 數字圖像處理(第3版)[M]. 北京:電子工業出版社,2013.
  • [2] 楊秀璋, 顏娜. Python網絡數據爬取及分析從入門到精通(分析篇)[M]. 北京:北京航天航空大學出版社, 2018.
  • [3] 羅子江等. Python中的圖像處理[M]. 科學出版社, 2020.
  • [4]“莫煩大神” 網易雲視頻地址
  • [5] https://study.163.com/course/courseLearn.htm?courseId=1003209007
  • [6] TensorFlow【極簡】CNN – Yellow_python大神
  • [7] https://github.com/siucaan/CNN_MNIST
  • [8] https://github.com/eastmountyxz/AI-for-TensorFlow
  • [9]《機器學習》周志華
  • [10] 神經網絡模型的評價指標 – ZHANG ALIN
  • [11] [深度學習] 分類指標accuracy,recall,precision等的區別 – z小白
  • [12] 分類指標準確率(Precision)和正確率(Accuracy)的區別 – mxp_neu
  • [13] 學習筆記2:scikit-learn中使用r2_score評價回歸模型 – Softdiamonds
  • [14] 方差、協方差、標準差、均方差、均方根值、均方誤差、均方根誤差對比分析 – cqfdcw
  • [15] 機器學習:衡量線性回歸法的指標(MSE、RMSE、MAE、R Squared)- volcao

你以為你有很多路可以選擇,其實你隻有一條路可以走