国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

?自組織映射(SOM)神經(jīng)網(wǎng)絡(luò)?Python實(shí)現(xiàn)

leon / 1959人閱讀

?九月?份了,車神哥又回歸了校園
?冬天?還會遠(yuǎn)嗎
?推薦一首最近很?喜歡?的歌?
?No Fear In My Heart -樸樹?


由于最近在寫一篇相關(guān)的論文,就說說其中遇到的一些問題吧~

Minisom

之前做過一個對minisom的第三方開源庫的介紹,可以點(diǎn)擊看這里

對相應(yīng)的代碼添加了注釋:

導(dǎo)入各種庫吧

# 導(dǎo)入庫from sklearn.model_selection import train_test_splitfrom sklearn.metrics import classification_reportimport numpy as npimport matplotlib.pyplot as pltfrom matplotlib.patches import Patchimport pandas as pdfrom minisom import MiniSomimport mathimport xlrdfrom icecream import icfrom tqdm import tqdmfrom openpyxl import load_workbookimport openpyxlfrom time import time

第一步是導(dǎo)入數(shù)據(jù)的Function,這很簡單就不解釋了

# 傳入數(shù)據(jù)成DataFrame的矩陣格式def loaddata(datafile, num_name):    df = pd.read_excel(datafile, sheet_name=num_name, index_col=0)   # 導(dǎo)入數(shù)據(jù)    return df  # 返回值

由于代碼不是很長,就沒有按照模塊來寫了


然后是導(dǎo)入源文件及其標(biāo)簽。
說實(shí)話,在現(xiàn)實(shí)項(xiàng)目中,想要找到不同特征的標(biāo)簽是真的真的真的太難了!!!
不要問為什么,當(dāng)你實(shí)踐你就知道了~

# 導(dǎo)入原始數(shù)據(jù)# 1.導(dǎo)入訓(xùn)練和測試數(shù)據(jù)集datafile = "*********.xls"  # 原始數(shù)據(jù)文件名# 2.導(dǎo)入標(biāo)簽數(shù)據(jù)y = pd.DataFrame(pd.read_csv("label****.csv"))    # 讀取你的標(biāo)簽數(shù)據(jù)或者原有的標(biāo)簽是最好的yy = []   # 設(shè)置空矩陣# 循環(huán)將標(biāo)簽導(dǎo)入yy矩陣中for iy in range(y.shape[0]):    Uy = y.iloc[iy, 0]    yy.append(int(Uy))y = yy   # 賦值給y

再讀取每個sheet中的不同特征名稱,我的數(shù)據(jù)集是這樣,如果你沒有特征名稱,最好對其進(jìn)行標(biāo)記,這樣會更加有效。

# 3.讀取特征標(biāo)簽feature_names = pd.DataFrame(pd.read_excel(datafile, index_col=0)).columns   # 取數(shù)據(jù)的列:特征標(biāo)簽class_names = [0, 1]  # 標(biāo)簽名稱feat = []   # 設(shè)置空矩陣# 循環(huán)將特征名稱添加到feat矩陣中for tz in range(feature_names.shape[0]):    tezh = feature_names[tz]    feat.append(tezh)  # 逐步添加進(jìn)featfeature_names = feat   # 賦值給feature_namesprint("特征名稱:", feature_names)

由于我的源文件會有很多個sheet,所以需要對每一個sheet進(jìn)行訓(xùn)練及測試,再進(jìn)行保存操作,如果你只要一個數(shù)據(jù)表的話,可以對此進(jìn)行相應(yīng)的改進(jìn)。

# 按照每一個數(shù)據(jù)Sheet讀取每一層的數(shù)據(jù)# 讀取文件數(shù)據(jù)集workbook = xlrd.open_workbook(datafile)  # 打開數(shù)據(jù)文件sheets = workbook.sheet_names()   # 讀取原始數(shù)據(jù)的數(shù)據(jù)表sheet名SheetNames = []   # 設(shè)置空矩陣# 循環(huán)輸出for sheetname in tqdm(sheets):    print("表格的名稱是:", sheetname)    SheetNames.append(sheetname)   # 循環(huán)添加進(jìn)空矩陣SheetNames中print("原始數(shù)據(jù)表的表單名稱為:", SheetNames)num_n = pd.DataFrame(SheetNames).shape[0]  # 獲取表單的個數(shù)print("表單的個數(shù)為:", num_n)# 設(shè)置空數(shù)據(jù)表1dff = pd.DataFrame(columns=["title", "content"])    # 添加列名dff.to_excel("SOM_Result.xlsx")   # 保存到"SOM_Result.xlsx"## 設(shè)置空數(shù)據(jù)表2dff2 = pd.DataFrame(columns=["title1", "content1"])   # 添加列名dff2.to_excel("SOM_label_result.xlsx")  # 保存到"SOM_label_result.xlsx"start_time = time()    # 記錄設(shè)置開始的時(shí)間

接下來也是對我的每一個表單進(jìn)行循環(huán)遍歷訓(xùn)練及其測試的過程,如果只需要進(jìn)行一次,那么只需要取消循環(huán)過程,更改其中的一些變量即可。
其中包含SOM的訓(xùn)練及測試,權(quán)值矩陣、map、聚類結(jié)果的可視化,精確度等操作。

for i_c in range(num_n):    if i_c < num_n:        print("程序目前處在第%r層數(shù)." % SheetNames[i_c])        XMat = loaddata(datafile, num_name=SheetNames[i_c])  # 返回得到浮點(diǎn)型矩陣        # 設(shè)置空數(shù)據(jù)表1        dff = pd.DataFrame(columns=["title", "content"])  # 添加列名        dff.to_excel("SOM_Result_"+ SheetNames[i_c] +".xlsx")  # 保存到"SOM_Result.xlsx"        ## 設(shè)置空數(shù)據(jù)表2        dff2 = pd.DataFrame(columns=["title1", "content1"])  # 添加列名        dff2.to_excel("SOM_label_result_"+ SheetNames[i_c] +".xlsx")  # 保存到"SOM_label_result.xlsx"        X =  XMat.values    # 將DataFrame格式改為np.array矩陣        # 劃分訓(xùn)練集、測試集  7:3        X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)  # X為原始數(shù)據(jù),y為標(biāo)簽數(shù)據(jù),test_size為訓(xùn)練集和測試集劃分比例,random_state為選擇隨機(jī)打亂的方式,可設(shè)置為01方式        N = X_train.shape[0]  #樣本數(shù)量        M = X_train.shape[1]  #維度/特征數(shù)量        """        設(shè)置超參數(shù)        """        size = math.ceil(np.sqrt(5 * np.sqrt(N)))  # 經(jīng)驗(yàn)公式:決定輸出層尺寸        print("訓(xùn)練樣本個數(shù):{}  測試樣本個數(shù):{}".format(N, X_test.shape[0]))        print("輸出網(wǎng)格最佳邊長為:", size)        max_iter = 1000  # 迭代次數(shù)        # Initialization and training(初始化及其訓(xùn)練) size為神經(jīng)元數(shù),M為輸入維度/特征數(shù)量, learning——rate為學(xué)習(xí)率        som = MiniSom(size, size, M, sigma=3, learning_rate=0.5,                      neighborhood_function="bubble")    # Neighborhood_function’近鄰函數(shù)‘可選的設(shè)置有"gaussian""mexican_hat""bubble". 調(diào)參的時(shí)候可以都試一遍,看效果        """        初始化權(quán)值,有2個API        """        som.pca_weights_init(X_train)   # PCA降維初始化        som.train_batch(X_train, max_iter, verbose=False)  # train_batch 每次按順序取一個樣本,用過最后一個樣本后跳回第一個樣本,循環(huán)直到迭代次數(shù)滿足max_iter        winmap = som.labels_map(X_train, y_train)   # 求取獲勝神經(jīng)元        # 判斷樣本的類別        def classify(som,data,winmap):            from numpy import sum as npsum   # 導(dǎo)入庫            default_class = npsum(list(winmap.values())).most_common()[0][0]   # 獲取獲勝神經(jīng)元的值            result = []   # 設(shè)置空矩陣            for d in data:   # 循環(huán)迭代                win_position = som.winner(d)   # 獲勝神經(jīng)元的權(quán)值位置                if win_position in winmap:    # 判斷是否屬于獲勝神經(jīng)元                    result.append(winmap[win_position].most_common()[0][0])  # 將其添加進(jìn)空矩陣result中                else:                    result.append(default_class)   # 若不滿足上面的條件則將default_class添加進(jìn)result中            print("輸出result結(jié)果:", result)            return result   # 返回值        # 輸出混淆矩陣        y_pred = classify(som, X_test, winmap)   # 調(diào)用classify函數(shù)        print(classification_report(y_test, np.array(y_pred)))   # 輸出混淆矩陣        # 繪制各種圖        # U-Matrix        heatmap = som.distance_map()  #生成U-Matrix        plt.imshow(heatmap, cmap="bone_r")      #miniSom案例中用的pcolor函數(shù),需要調(diào)整坐標(biāo)        plt.colorbar()   # 顏色卡        plt.figure(figsize=(9, 9))   # 設(shè)置圖像大小        # 背景上畫U-Matrix        heatmap = som.distance_map()  # 熱力圖        plt.pcolor(heatmap, cmap="bone_r")  # plotting the distance map as background 設(shè)置樣式        # 定義不同標(biāo)簽的圖案標(biāo)記        markers = ["o", "s"]   # 設(shè)置圖案樣式        colors = ["C0", "C1"]   # 定義不同標(biāo)簽圖案的顏色        category_color = {"Normal": "C0",                          "fault": "C1",                          }   # 設(shè)置對應(yīng)字典        for cnt, xx in enumerate(X_train):  # 迭代獲取X_train訓(xùn)練數(shù)據(jù)            w = som.winner(xx)  # getting the winner            # 在樣本Heat的地方畫上標(biāo)記            plt.plot(w[0]+.5, w[1]+.5, markers[y_train[cnt]], markerfacecolor="None",                     markeredgecolor=colors[y_train[cnt]], markersize=12, markeredgewidth=2) # plot繪制圖像,markerfacecolor:標(biāo)記顏色,markersize:標(biāo)記尺寸,markeredgewidth:標(biāo)記寬度        plt.axis([0, size, 0, size])  # 設(shè)置坐標(biāo)系        ax = plt.gca()    # 進(jìn)行坐標(biāo)軸的移動,gca就是get current axes        ax.invert_yaxis() #顛倒y軸方向        legend_elements = [Patch(facecolor=clr,                                 edgecolor="w",                                 label=l) for l, clr in category_color.items()]        plt.legend(handles=legend_elements, loc="center left", bbox_to_anchor=(1, .95))  # 設(shè)置圖像界面細(xì)節(jié)        # plt.show()  # 顯示圖        label_name_map_number = {"Normal":0,"Fault":1}        # 神經(jīng)元占比餅圖        from matplotlib.gridspec import GridSpec        plt.figure(figsize=(9, 9))    # 設(shè)置圖像界面大小        the_grid = GridSpec(size, size)   # 神經(jīng)元個數(shù)        for position in winmap.keys():   # 迭代獲取獲勝神經(jīng)元位置            label_fracs = [winmap[position][label] for label in [0,1]]  # 獲取標(biāo)簽            plt.subplot(the_grid[position[1], position[0]], aspect=1)    # 表示把顯示界面分割成the_grid[position[1]*position[0]的網(wǎng)格            patches, texts = plt.pie(label_fracs)    # 用于繪制餅圖            plt.text(position[0]/100, position[1]/100,  str(len(list(winmap[position].elements()))),                      color="black", fontdict={"weight": "bold",  "size": 15},                      va="center", ha="center")  # 給圖中加標(biāo)簽        plt.legend(patches, class_names, loc="center right", bbox_to_anchor=(-1, 9), ncol=3)  # 顯示圖中的各種標(biāo)簽        # plt.show()   # 輸出顯示圖像        # 權(quán)重?zé)崃D        plt.figure(figsize=(10, 10))   # 設(shè)置圖像大小        for i, f in enumerate(feature_names):  # 迭代循環(huán)獲取feature_names特征            plt.subplot(4, 4, i+1)    # 表示把顯示界面分割成 4*4 的網(wǎng)格            plt.title(f)   # 設(shè)置標(biāo)題            W = som.get_weights()  # 獲得權(quán)重?cái)?shù)據(jù)            plt.imshow(W[:,:,i], cmap="coolwarm")   # 輸出熱力圖,W[:,:,i]變量存儲圖像,可以是浮點(diǎn)型數(shù)組、unit8數(shù)組以及PIL圖像,參數(shù)cmap用于設(shè)置熱圖的Colormap,代表熱力塊的樣式顏色            plt.colorbar()   # colorbar,顏色卡尺            plt.xticks(np.arange(size+1))   # 設(shè)置主圖的橫坐標(biāo)的刻度字體大小            plt.yticks(np.arange(size+1))   # 設(shè)置主圖的縱坐標(biāo)的刻度字體大小        # plt.show()  # 輸出顯示圖像        # 保存result——label        print("開始SOM標(biāo)簽Result保存!")        df_winmap = pd.DataFrame.from_dict(winmap, orient="index")  # 讀取轉(zhuǎn)換winmap        ic(df_winmap)  # 輸出顯示df_winmap        writer1 = pd.ExcelWriter("SOM_label_result_"+ SheetNames[i_c] +".xlsx", engine="openpyxl")   # 讀取"SOM_label_result.xlsx"        book1 = load_workbook(writer1.path)  # 獲取文件路徑        writer1.book = book1  # 賦值        df_winmap.to_excel(excel_writer=writer1, sheet_name=str(SheetNames[i_c]))  # 建立為數(shù)據(jù)表        writer1.save()   # 保存數(shù)據(jù)表        writer1.close()  # 關(guān)閉數(shù)據(jù)表        print("SOM標(biāo)簽Result保存結(jié)束!")        # 保存result_data        print("開始SOM最終Result坐標(biāo)保存!")        winner = som.win_map(X_train, return_indices=True)   # 獲取SOM的獲勝神經(jīng)元結(jié)果        my_df = pd.DataFrame.from_dict(winner, orient="index")  # 轉(zhuǎn)換輸出賦值給my_df        ic(my_df)   # 顯示輸出        writer = pd.ExcelWriter("SOM_Result_"+ SheetNames[i_c] +".xlsx", engine="openpyxl")   # 建立數(shù)據(jù)表"SOM_Result.xlsx"        book = load_workbook(writer.path)   # 獲取文件路徑        writer.book = book   # 賦值        my_df.to_excel(excel_writer=writer, sheet_name=str(SheetNames[i_c]))   # 保存數(shù)據(jù)表        writer.save()   # 保存操作        writer.close()  # 關(guān)閉操作        print("SOM最終Result坐標(biāo)保存結(jié)束!")

大體的流程就是這樣了,minisom的庫訓(xùn)練起來比Matlab快了不知道多少倍,?yyds?!!!


九月,加油吧!!!


?堅(jiān)持讀Paper,堅(jiān)持做筆記,堅(jiān)持學(xué)習(xí)?!!!
?To Be No.1

??


?創(chuàng)作不易?,過路能?關(guān)注收藏點(diǎn)個贊?三連就最好不過了

?( ′???` )

?


我是這耀眼的瞬間,是劃過天邊的剎那火焰.

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/119411.html

相關(guān)文章

  • 神經(jīng)網(wǎng)絡(luò)基礎(chǔ)

    摘要:要學(xué)習(xí)深度學(xué)習(xí),那么首先要熟悉神經(jīng)網(wǎng)絡(luò),簡稱的一些基本概念。網(wǎng)絡(luò)徑向基函數(shù)網(wǎng)絡(luò)是一種單隱層前饋神經(jīng)網(wǎng)絡(luò),它使用徑向基函數(shù)作為隱層神經(jīng)元激活函數(shù),而輸出層則是對隱層神經(jīng)元輸出的線性組合。 閱讀目錄1. 神經(jīng)元模型2. 感知機(jī)和神經(jīng)網(wǎng)絡(luò)3. 誤差逆?zhèn)鞑ニ惴?. 常見的神經(jīng)網(wǎng)絡(luò)模型5. 深度學(xué)習(xí)6. 參考內(nèi)容目前,深度學(xué)習(xí)(Deep Learning,簡稱DL)在算法領(lǐng)域可謂是大紅大紫,現(xiàn)在不只是...

    starsfun 評論0 收藏0
  • 神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)簡史(2):BP算法之后的又一突破—信念網(wǎng)絡(luò)

    摘要:多加了這兩層卷積層和匯集層是卷積神經(jīng)網(wǎng)絡(luò)和普通舊神經(jīng)網(wǎng)絡(luò)的主要區(qū)別。卷積神經(jīng)網(wǎng)絡(luò)的操作過程那時(shí),卷積的思想被稱作權(quán)值共享,也在年和關(guān)于反向傳播的延伸分析中得到了切實(shí)討論。 導(dǎo)讀:這是《神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)簡史》第二部分,這一部分我們會了解BP算法發(fā)展之后一些取得迅猛發(fā)展的研究,稍后我們會看到深度學(xué)習(xí)的關(guān)鍵性基礎(chǔ)。神經(jīng)網(wǎng)絡(luò)獲得視覺隨著訓(xùn)練多層神經(jīng)網(wǎng)絡(luò)的謎題被揭開,這個話題再一次變得空前熱門,羅森...

    李世贊 評論0 收藏0
  • 啟明云端分享|Sigmastar SSD201|IDO-SOM2D01核心板

    摘要:模塊在的面積上整合以及電源管理電路,可應(yīng)用于智能顯示,樓宇對講,醫(yī)療電子,語音識別家電應(yīng)用以及物聯(lián)網(wǎng)智能網(wǎng)關(guān)等領(lǐng)域核心優(yōu)勢默認(rèn)配置,超小尺寸。 系列: Sigmstar SSD201 名稱: IDO-SOM2D01 IDO-SOM2D01 是基于 SigmaStar SSD201 SoC(A...

    dabai 評論0 收藏0
  • Google Coral Edge TPU USB加速棒上手體驗(yàn)

    摘要:谷歌在年國際消費(fèi)電子展以及今年的開發(fā)峰會上首次展示了他們的,然后于三月份發(fā)布了。樹莓派上性能的局限性不幸的是,業(yè)余愛好者最喜歡樹莓派無法充分發(fā)揮加速器的功能和速度。使用端口,目前的樹莓派設(shè)備沒有或,而只能使用速度較慢的。 Edge AI是什么?它為何如此重要? 傳統(tǒng)意義上,AI解決方案需要強(qiáng)大的并行計(jì)算處理能力,長期以來,AI服務(wù)都是通過聯(lián)網(wǎng)在線的云端基于服務(wù)器的計(jì)算來提供服務(wù)。但是具...

    hiyayiji 評論0 收藏0
  • Tensorflow代碼解析(一)

    摘要:本文依據(jù)對簡稱白皮書和官方教程的理解,從系統(tǒng)和代碼實(shí)現(xiàn)角度講解的內(nèi)部實(shí)現(xiàn)原理。這一點(diǎn)是和包括在內(nèi)的符號編程框架較大的不同。的做法是引入了來處理。這樣就幾乎讓本身成為一門獨(dú)立的語言。當(dāng)為是,執(zhí)行操作當(dāng)為時(shí),執(zhí)行操作。支持的控制算子有和等。 摘要2015年11月9日,Google發(fā)布深度學(xué)習(xí)框架TensorFlow并宣布開源,并迅速得到廣泛關(guān)注,在圖形分類、音頻處理、推薦系統(tǒng)和自然語言處理等場景...

    李世贊 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<