作業流程(今日進度為1.1~1.2)
1.1 獲得各模型800字機率表。(包括官方800字內、官方800字外與測試賽資料集)
1.2 安裝R與RStudio。
1.3 設定資料集路徑
1.4 找出每個中文字的閾值。(如何選擇isnull的閾值)
1.5 任意選擇奇數個模型組合後,產生模型權重表與利用新模型權重得到的機率表。(如何選擇加權依據)
1.6 判斷isnull。(如何選擇判斷isnull的依據)
1.7 交叉驗證不同方法組合的模型準確率。(共 2 * 2 * 2 = 8種)
獲得各模型800字機率表
2.1 預測樣本
2.2 程式碼
from tensorflow.keras.preprocessing import image
import numpy as np
import os
from tensorflow.keras.models import load_model
import time
import csv
# 讀取圖檔,並進行影像前處理
def read_image(img_path):
    try:
        img = image.load_img(img_path, target_size=(80, 80))
    except Exception as e:
        print(img_path, e)
    img = image.img_to_array(img)
    img = np.expand_dims(img, axis=0)
    return img/255
# 返回最大機率值的中文字的標籤
def to_word(pred:np.array)->str:
    index = np.argmax(pred)
    return labels[index]
# 定義3個欄位值(預測值、實際值、是否正確預測)
def append_pre_true(arr,pre,true,predict_true_or_not)->list:
    arr = list(arr)
    arr.append(pre)
    arr.append(true)
    arr.append(predict_true_or_not)
    return arr
# 若預測結果正確,在predict_true_or_not填入1;反之團入0
def predict_true_or_not(pre:str,true:str)->bool:
    if pre == true:
        return 1
    else:
        return 0
# 定義欄位名稱
def columns(labels:list):
    for i in ['pre', 'label', 'true_or_not']:
        labels.append(i)
    return labels
# 預測及賦值
def model_predict(model,img):
    pred = model.predict(img)[0]
    word = to_word(pred)
    true_or_not = predict_true_or_not(word, subfolder)
    return pred, word, true_or_not
if __name__ == "__main__":
    # 讀取800字標籤
    labels = os.listdir('./data/train')
    print(labels)
    # 載入訓練好的模型
    model_path = './model/densenet201_v2/35_最佳/Densenet201_checkpoint_v2.h5'
    model = load_model(model_path)
    #存放檔案的資料夾
    folder_name = './data/123/'
    #csv檔名稱
    csv_name = "Densenet201__retrained_v2_6K.csv"
    # 計時起點
    start = time.time()
    # 將800個字的預測機率,儲存到CSV檔
    with open(csv_name, "w", newline="", encoding="utf_8_sig") as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow(columns(labels))  #先寫入欄位名稱
        for subfolder in os.listdir(folder_name):
            for jpg in os.listdir(folder_name+subfolder):
                # 請輸入你的圖片path
                img_path = folder_name+subfolder+'/'+jpg
                img = read_image(img_path)
                #1*800向量,預測字,是否猜中
                pred, word, true_or_not = model_predict(model,img)
                #變成一列 : 1*800向量,預測字,真實字,是否猜中
                row = append_pre_true(pred, word, subfolder, true_or_not)
                writer.writerow(row)
                print(word, subfolder, true_or_not)
    #計時終點
    end = time.time()
    spend = end - start
    hour = spend // 3600
    minu = (spend - 3600 * hour) // 60
    sec = spend - 3600 * hour - 60 * minu
    print(f'一共花費了{hour}小時{minu}分鐘{sec}秒')
2.3 輸出800字機率表

安裝R與RStudio
3.1 R
3.2 RStudio
請到官方載點下載安裝檔。
依照作業系統選擇,此處以Windows10作業系統為例。(目前是RStudio-2021.09.0-351.exe)
開啟安裝檔後,連續點選下一步,完成安裝。
讓我們繼續看下去...