keras評估模型

2021-09-24 05:18:36 字數 4018 閱讀 2242

目錄

keras評估模型

自動評估

手動評估

手動分離資料集

利用交叉驗證

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: jia shilin

'''通過fit()函式分割引數,設定資料集百分比,

'''from keras.models import sequential

from keras.layers import dense

import numpy as np

np.random.seed(100)

# data

dataset = np.loadtxt('pima-indians-diabetes.csv', delimiter=',') # 總共有9維資料,最後乙個維度為0-1標籤

x = dataset[:, 0:8]

y = dataset[:, 8:]

# model

model = sequential()

model.add(dense(12, input_dim=8, activation='relu'))

model.add(dense(12, activation='relu'))

model.add(dense(12, activation='relu'))

model.add(dense(2, activation='sigmoid'))

# compile

model.compile(

loss='binary_corssentropy', optimizer='adam',

metrics=['accuracy'],

)# 訓練模型並評估

model.fit(x=x,y=y,epochs=150, batch_size=20,validation_split=0.2)

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: jia shilin

'''手動分離 資料集

使用sciket機器學習庫中train_test_split()函式將資料分割成訓練集合評估資料集

from sklearn.model_selection import train_test_split

'''from keras.models import sequential

from keras.layers import dense

from sklearn.model_selection import train_test_split

import numpy as np

seed = 7 # 可能多次用到該引數

np.random.seed(seed)

# data

dataset = np.loadtxt('diabetes.csv', delimiter=',')

# 分割資料

x = dataset[:, 0:8]

y = dataset[:, 8:]

# 分割資料集

x_train, x_validation, y_train, y_validation = train_test_split(x, y, test_size=0.2, random_state=seed)

# model

model = sequential()

model.add(dense(32, input_dim=8, activation='relu'))

model.add(dense(10, activation='relu'))

model.add(dense(10, activation='relu'))

model.add(dense(10, activation='relu'))

model.add(dense(2, activation='sigmoid'))

# compile

model.compile(

loss='binary_crossentropy',optimizer='adam',

metrics=['accuracy'],

)#train

model.fit(

x_train,y_train,

validation_data=(x_validation,y_validation),#此處不是validation_split

epochs=150,

batch_size=50

)

為什麼交叉驗證

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: jia shilin

'''將資料集分為k個子集,選取其中乙個為評估資料集,重複上述,

採用k個模型評估結果的平均值作為模型的最終結果,

通常不用與評估深度學習模型,因為計算的開銷比較大,如通常用10個子集,10個模型大大增加了模型的評估時間開銷

使用scikit_learn機器學習庫中的stratifiedkfold類將資料分為10個子集,並用這10個子集建立和評估10個模型,

收集這10個模型的評估得分,通過設定verbose=0來關閉模型的fit()和evaluate()函式的詳細輸出,在每個模型構建完成後,進行評估並輸出評估結果,

在所有模型評估完成後,輸出偶像得分的均值和標準差,來對模型精度魯棒性的估計

'''from keras.models import sequential

from keras.layers import dense

import numpy as np

from sklearn.model_selection import stratifiedkfold

seed = 8

np.random.seed(seed)

# data

dataset = np.loadtxt('pima-indians-diabeters.csv', delimiter=',')

x_data = dataset[:, 0:8]

y_data = dataset[:, 8:]

kfold = stratifiedkfold(n_splits=10, random_state=seed, shuffle=true)

cvscores =

for train, validation in kfold.split(x_data, y_data):

# model

model = sequential()

model.add(dense(18, input_dim=8, activation='relu'))

model.add(dense(18, activation='relu'))

model.add(dense(2, activation='sigmoid'))

# compile

model.compile(

loss='binary_crossentropy',

metrics=['accuracy'],

optimizer='adam',

)# train

model.fit(

x_data[train], y_data[train],

epochs=150,

batch_size=20,

verbose=0,

)# 評估

scores = model.evaluate(x_data[validation], y_data[validation], verbose=0)

# show

print('%s:%.2f%%' % (model.metrics_names[1], scores[1] * 100))

print('%.2f%% (+/- %.2f%%)' % (np.mean(cvscores), np.std(cvscores)))

keras評估模型

當建立好模型並且用來訓練之後,如何評估模型的好壞,準確度又如何呢?三種常用方法 1 使用自動驗證方法 在 fit 函式中增加乙個validation split引數,該引數用來進行驗證效果 該引數可以自由設定,一般設定為20 或者30 也就是測試集佔總資料集的20 或者30 的資料用來進行驗證,其餘...

keras載入模型

說明 該程式是乙個包含兩個隱藏層的神經網路。演示如何載入乙個儲存好的模型。資料集 mnist from future import print function python提供了 future 模組,把下乙個新版本的特性匯入到當前版本,於是我們就可以在當前版本中測試一些新版本的特性。import ...

keras模型融合

1.構建模型 模型1 33次風運動 defmodel1 ipt layer1 dense units 512,input dim input node,kernel initializer normal activation sigmoid name layer1 ipt layer2 dense ...