首頁>技術>

  在北京做某個專案的時候,客戶要求能夠對資料進行訓練、預測,同時能匯出模型,還有在頁面上顯示訓練的進度。前面的幾個要求都不難實現,但在頁面上顯示訓練進度當時筆者並沒有實現。  本文將會分享如何在Keras中將模型訓練的過程實時視覺化。  幸運的是,已經有人幫我們做好了這件事,這個專案名叫hualos,Github的訪問網址為:https://github.com/fchollet/hualos, 作者為François Chollet和Eder Santana,前面的作者就是Keras的創造者,同時也是書籍《Deep Learning with Python》的作者。  大神的工作大大地方便了我們的使用。呼叫該專案僅需要三行程式碼,示例如下:

from keras import callbacksremote = callbacks.RemoteMonitor(root='http://localhost:9000')model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch, validation_data=(X_test, Y_test), callbacks=[remote])

  該專案使用Python2寫的,用到的第三方模組為Flask, gevent,其中Flask為網頁端框架,gevent用於併發。用到的JavaScript的第三方模組為D3.js和C3.js。該專案使用起來非常方便,只需要切換至hualos專案所在資料夾,然後python api.py即可。  下面將介紹其使用方法,我們的專案結構如下:

專案結構

# 匯入模組import numpy as npimport keras as Kimport tensorflow as tfimport pandas as pdfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import LabelBinarizerfrom keras import callbacks# 讀取CSV資料集,並拆分為訓練集和測試集# 該函式的傳入引數為CSV_FILE_PATH: csv檔案路徑def load_data(CSV_FILE_PATH):    IRIS = pd.read_csv(CSV_FILE_PATH)    target_var = 'class'  # 目標變數    # 資料集的特徵    features = list(IRIS.columns)    features.remove(target_var)    # 目標變數的類別    Class = IRIS[target_var].unique()    # 目標變數的類別字典    Class_dict = dict(zip(Class, range(len(Class))))    # 增加一列target, 將目標變數進行編碼    IRIS['target'] = IRIS[target_var].apply(lambda x: Class_dict[x])    # 對目標變數進行0-1編碼(One-hot Encoding)    lb = LabelBinarizer()    lb.fit(list(Class_dict.values()))    transformed_labels = lb.transform(IRIS['target'])    y_bin_labels = []  # 對多分類進行0-1編碼的變數    for i in range(transformed_labels.shape[1]):        y_bin_labels.append('y' + str(i))        IRIS['y' + str(i)] = transformed_labels[:, i]    # 將資料集分為訓練集和測試集    train_x, test_x, train_y, test_y = train_test_split(IRIS[features], IRIS[y_bin_labels], \                                                        train_size=0.7, test_size=0.3, random_state=0)    return train_x, test_x, train_y, test_y, Class_dictif __name__ == '__main__':    # 0. 開始    print("\nIris dataset using Keras")    np.random.seed(4)    tf.set_random_seed(13)    # 1. 讀取CSV資料集    print("Loading Iris data into memory")    CSV_FILE_PATH = 'iris.csv'    train_x, test_x, train_y, test_y, Class_dict = load_data(CSV_FILE_PATH)    # 2. 定義模型    init = K.initializers.glorot_uniform(seed=1)    simple_adam = K.optimizers.Adam()    model = K.models.Sequential()    model.add(K.layers.Dense(units=5, input_dim=4, kernel_initializer=init, activation='relu'))    model.add(K.layers.Dense(units=6, kernel_initializer=init, activation='relu'))    model.add(K.layers.Dense(units=3, kernel_initializer=init, activation='softmax'))    model.compile(loss='categorical_crossentropy', optimizer=simple_adam, metrics=['accuracy'])    # 3. 訓練模型    b_size = 1    max_epochs = 100    print("Starting training ")    remote = callbacks.RemoteMonitor(root='http://localhost:9000')    h = model.fit(train_x, train_y, validation_data=(test_x, test_y), batch_size=b_size, epochs=max_epochs,                  shuffle=True, verbose=1, callbacks=[remote])    print("Training finished \n")    # 4. 評估模型    eval = model.evaluate(test_x, test_y, verbose=0)    print("Evaluation on test data: loss = %0.6f accuracy = %0.2f%% \n" \          % (eval[0], eval[1] * 100) )    # 5. 使用模型進行預測    np.set_printoptions(precision=4)    unknown = np.array([[6.1, 3.1, 5.1, 1.1]], dtype=np.float32)    predicted = model.predict(unknown)    print("Using model to predict species for features: ")    print(unknown)    print("\nPredicted softmax vector is: ")    print(predicted)    species_dict = {v:k for k,v in Class_dict.items()}    print("\nPredicted species is: ")    print(species_dict[np.argmax(predicted)])

  我們切換至hualos資料夾,執行python api.py,然後再用Python3執行model_train.py檔案,在瀏覽器中輸入網址:http://localhost:9000,即可看到在網頁中顯示的模型訓練的實施視覺化的結果,影象如下:

因為這裡無法給出影片,需要觀看影片的讀者可以移步網址:https://mp.weixin.qq.com/s?__biz=MzU2NTYyMDk5MQ==&mid=2247484522&idx=1&sn=dab46a55945baf2411e30bd109cee76f&chksm=fcb9bdfacbce34ec02f3e958988e9b400676d29f88c1efad5ce01fb1f4ce2f5f96ccf0e4af66&token=1377830530&lang=zh_CN#rd 。

28
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • MySQL資料庫入門(三)