欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

keras繪制acc和loss曲線圖實(shí)例

 更新時(shí)間:2020年06月15日 14:21:03   作者:ninesun11  
這篇文章主要介紹了keras繪制acc和loss曲線圖實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

我就廢話不多說(shuō)了,大家還是直接看代碼吧!

#加載keras模塊
from __future__ import print_function
import numpy as np
np.random.seed(1337) # for reproducibility

import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.optimizers import SGD, Adam, RMSprop
from keras.utils import np_utils
import matplotlib.pyplot as plt
%matplotlib inline

#寫一個(gè)LossHistory類,保存loss和acc
class LossHistory(keras.callbacks.Callback):
 def on_train_begin(self, logs={}):
  self.losses = {'batch':[], 'epoch':[]}
  self.accuracy = {'batch':[], 'epoch':[]}
  self.val_loss = {'batch':[], 'epoch':[]}
  self.val_acc = {'batch':[], 'epoch':[]}

 def on_batch_end(self, batch, logs={}):
  self.losses['batch'].append(logs.get('loss'))
  self.accuracy['batch'].append(logs.get('acc'))
  self.val_loss['batch'].append(logs.get('val_loss'))
  self.val_acc['batch'].append(logs.get('val_acc'))

 def on_epoch_end(self, batch, logs={}):
  self.losses['epoch'].append(logs.get('loss'))
  self.accuracy['epoch'].append(logs.get('acc'))
  self.val_loss['epoch'].append(logs.get('val_loss'))
  self.val_acc['epoch'].append(logs.get('val_acc'))

 def loss_plot(self, loss_type):
  iters = range(len(self.losses[loss_type]))
  plt.figure()
  # acc
  plt.plot(iters, self.accuracy[loss_type], 'r', label='train acc')
  # loss
  plt.plot(iters, self.losses[loss_type], 'g', label='train loss')
  if loss_type == 'epoch':
   # val_acc
   plt.plot(iters, self.val_acc[loss_type], 'b', label='val acc')
   # val_loss
   plt.plot(iters, self.val_loss[loss_type], 'k', label='val loss')
  plt.grid(True)
  plt.xlabel(loss_type)
  plt.ylabel('acc-loss')
  plt.legend(loc="upper right")
  plt.show()
#變量初始化
batch_size = 128 
nb_classes = 10
nb_epoch = 20

# the data, shuffled and split between train and test sets
(X_train, y_train), (X_test, y_test) = mnist.load_data()

X_train = X_train.reshape(60000, 784)
X_test = X_test.reshape(10000, 784)
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255
print(X_train.shape[0], 'train samples')
print(X_test.shape[0], 'test samples')

# convert class vectors to binary class matrices
Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_classes)

#建立模型 使用Sequential()
model = Sequential()
model.add(Dense(512, input_shape=(784,)))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(10))
model.add(Activation('softmax'))

#打印模型
model.summary()

#訓(xùn)練與評(píng)估
#編譯模型
model.compile(loss='categorical_crossentropy',
    optimizer=RMSprop(),
    metrics=['accuracy'])
#創(chuàng)建一個(gè)實(shí)例history
history = LossHistory()

#迭代訓(xùn)練(注意這個(gè)地方要加入callbacks)
model.fit(X_train, Y_train,
   batch_size=batch_size, nb_epoch=nb_epoch,
   verbose=1, 
   validation_data=(X_test, Y_test),
   callbacks=[history])

#模型評(píng)估
score = model.evaluate(X_test, Y_test, verbose=0)
print('Test score:', score[0])
print('Test accuracy:', score[1])

#繪制acc-loss曲線
history.loss_plot('epoch')

補(bǔ)充知識(shí):keras中自定義驗(yàn)證集的性能評(píng)估(ROC,AUC)

在keras中自帶的性能評(píng)估有準(zhǔn)確性以及l(fā)oss,當(dāng)需要以auc作為評(píng)價(jià)驗(yàn)證集的好壞時(shí),就得自己寫個(gè)評(píng)價(jià)函數(shù)了:

from sklearn.metrics import roc_auc_score
from keras import backend as K

# AUC for a binary classifier
def auc(y_true, y_pred):
 ptas = tf.stack([binary_PTA(y_true,y_pred,k) for k in np.linspace(0, 1, 1000)],axis=0)
 pfas = tf.stack([binary_PFA(y_true,y_pred,k) for k in np.linspace(0, 1, 1000)],axis=0)
 pfas = tf.concat([tf.ones((1,)) ,pfas],axis=0)
 binSizes = -(pfas[1:]-pfas[:-1])
 s = ptas*binSizes
 return K.sum(s, axis=0)
#------------------------------------------------------------------------------------
# PFA, prob false alert for binary classifier
def binary_PFA(y_true, y_pred, threshold=K.variable(value=0.5)):
 y_pred = K.cast(y_pred >= threshold, 'float32')
 # N = total number of negative labels
 N = K.sum(1 - y_true)
 # FP = total number of false alerts, alerts from the negative class labels
 FP = K.sum(y_pred - y_pred * y_true)
 return FP/N
#-----------------------------------------------------------------------------------
# P_TA prob true alerts for binary classifier
def binary_PTA(y_true, y_pred, threshold=K.variable(value=0.5)):
 y_pred = K.cast(y_pred >= threshold, 'float32')
 # P = total number of positive labels
 P = K.sum(y_true)
 # TP = total number of correct alerts, alerts from the positive class labels
 TP = K.sum(y_pred * y_true)
 return TP/P
 
#接著在模型的compile中設(shè)置metrics
#如下例子,我用的是RNN做分類
from keras.models import Sequential
from keras.layers import Dense, Dropout
import keras
from keras.layers import GRU

model = Sequential()
model.add(keras.layers.core.Masking(mask_value=0., input_shape=(max_lenth, max_features))) #masking用于變長(zhǎng)序列輸入
model.add(GRU(units=n_hidden_units,activation='selu',kernel_initializer='orthogonal', recurrent_initializer='orthogonal',
    bias_initializer='zeros', kernel_regularizer=regularizers.l2(0.01), recurrent_regularizer=regularizers.l2(0.01),
    bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None,
    bias_constraint=None, dropout=0.5, recurrent_dropout=0.0, implementation=1, return_sequences=False,
    return_state=False, go_backwards=False, stateful=False, unroll=False)) 
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy',
    optimizer='adam',
    metrics=[auc]) #寫入自定義評(píng)價(jià)函數(shù)

接下來(lái)就自己作預(yù)測(cè)了...

方法二:

from sklearn.metrics import roc_auc_score
import keras
class RocAucMetricCallback(keras.callbacks.Callback):
 def __init__(self, predict_batch_size=1024, include_on_batch=False):
  super(RocAucMetricCallback, self).__init__()
  self.predict_batch_size=predict_batch_size
  self.include_on_batch=include_on_batch
 
 def on_batch_begin(self, batch, logs={}):
  pass
 
 def on_batch_end(self, batch, logs={}):
  if(self.include_on_batch):
   logs['roc_auc_val']=float('-inf')
   if(self.validation_data):
    logs['roc_auc_val']=roc_auc_score(self.validation_data[1], 
             self.model.predict(self.validation_data[0],
                  batch_size=self.predict_batch_size))
 def on_train_begin(self, logs={}):
  if not ('roc_auc_val' in self.params['metrics']):
   self.params['metrics'].append('roc_auc_val')
 
 def on_train_end(self, logs={}):
  pass
 
 def on_epoch_begin(self, epoch, logs={}):
  pass
 
 def on_epoch_end(self, epoch, logs={}):
  logs['roc_auc_val']=float('-inf')
  if(self.validation_data):
   logs['roc_auc_val']=roc_auc_score(self.validation_data[1], 
            self.model.predict(self.validation_data[0],
                 batch_size=self.predict_batch_size))
import numpy as np
import tensorflow as tf
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.layers import GRU
import keras
from keras.callbacks import EarlyStopping
from sklearn.metrics import roc_auc_score
from keras import metrics
 
cb = [
 my_callbacks.RocAucMetricCallback(), # include it before EarlyStopping!
 EarlyStopping(monitor='roc_auc_val',patience=300, verbose=2,mode='max')
]
model = Sequential()
model.add(keras.layers.core.Masking(mask_value=0., input_shape=(max_lenth, max_features)))
# model.add(Embedding(input_dim=max_features+1, output_dim=64,mask_zero=True))
model.add(GRU(units=n_hidden_units,activation='selu',kernel_initializer='orthogonal', recurrent_initializer='orthogonal',
    bias_initializer='zeros', kernel_regularizer=regularizers.l2(0.01), recurrent_regularizer=regularizers.l2(0.01),
    bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None,
    bias_constraint=None, dropout=0.5, recurrent_dropout=0.0, implementation=1, return_sequences=False,
    return_state=False, go_backwards=False, stateful=False, unroll=False)) #input_shape=(max_lenth, max_features),
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
 
model.compile(loss='binary_crossentropy',
    optimizer='adam',
    metrics=[auc]) #這里就可以寫其他評(píng)估標(biāo)準(zhǔn)
model.fit(x_train, y_train, batch_size=train_batch_size, epochs=training_iters, verbose=2,
   callbacks=cb,validation_split=0.2,
   shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0)

親測(cè)有效!

以上這篇keras繪制acc和loss曲線圖實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python使用pdfminer解析pdf文件的方法示例

    python使用pdfminer解析pdf文件的方法示例

    這篇文章主要介紹了python使用pdfminer解析pdf文件的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Django的HttpRequest和HttpResponse對(duì)象詳解

    Django的HttpRequest和HttpResponse對(duì)象詳解

    這篇文章主要介紹了Django的HttpRequest和HttpResponse對(duì)象,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Python實(shí)現(xiàn)希爾排序,歸并排序和桶排序的示例代碼

    Python實(shí)現(xiàn)希爾排序,歸并排序和桶排序的示例代碼

    希爾、歸并、快速排序算法可歸為同一類,它們的共同點(diǎn)都是建立在分治思想之上。把大問(wèn)題分拆成小問(wèn)題,解決所有小問(wèn)題后,再合并每一個(gè)小問(wèn)題的結(jié)果,最終得到對(duì)原始問(wèn)題的解答。本文將介紹這三種算法的實(shí)現(xiàn)代碼,需要的可以參考一下
    2022-04-04
  • Python使用PyMongo4.x操作MongoDB的教程分享

    Python使用PyMongo4.x操作MongoDB的教程分享

    PyMongo是一個(gè)Python編程語(yǔ)言中用于連接和操作MongoDB數(shù)據(jù)庫(kù)的庫(kù),它提供了豐富的功能和API,使開(kāi)發(fā)者能夠在Python中輕松地進(jìn)行MongoDB的數(shù)據(jù)交互和管理,本文給大家總結(jié)了Python如何使用PyMongo4.x操作MongoDB,需要的朋友可以參考下
    2023-09-09
  • Pytorch如何打印與Keras的model.summary()類似的輸出(最新推薦)

    Pytorch如何打印與Keras的model.summary()類似的輸出(最新推薦)

    這篇文章主要介紹了Pytorch如何打印與Keras的model.summary()類似的輸出,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • python3圖片轉(zhuǎn)換二進(jìn)制存入mysql

    python3圖片轉(zhuǎn)換二進(jìn)制存入mysql

    MYSQL是支持把圖片存入數(shù)據(jù)庫(kù)的,也相應(yīng)的有一個(gè)專門的字段BLOB (Binary Large Object),即較大的二進(jìn)制對(duì)象字段,看下面代碼
    2013-12-12
  • Python的Tornado框架異步編程入門實(shí)例

    Python的Tornado框架異步編程入門實(shí)例

    這篇文章主要介紹了Python的Tornado框架異步編程入門實(shí)例,異步編程的思維與普通編程比起來(lái)有些不同,需要的朋友可以參考下
    2015-04-04
  • Python報(bào)錯(cuò)NameError: name ‘secrets‘ is not defined解決

    Python報(bào)錯(cuò)NameError: name ‘secrets‘ is not

    在使用Python進(jìn)行安全編程時(shí),我們經(jīng)常需要使用secrets模塊來(lái)生成安全的隨機(jī)數(shù),但是卻遇到這個(gè)問(wèn)題,本文主要介紹了Python報(bào)錯(cuò)NameError: name ‘secrets‘ is not defined解決,感興趣的可以了解一下
    2024-06-06
  • 使用Pygame制作中秋嫦娥奔月小游戲

    使用Pygame制作中秋嫦娥奔月小游戲

    中秋節(jié)是中國(guó)傳統(tǒng)的重要節(jié)日之一,起源于嫦娥奔月的神話故事,在中秋節(jié)這個(gè)特殊的日子里,人們不僅會(huì)欣賞明亮的月亮和嫦娥奔月的美麗故事,還會(huì)舉行一些慶?;顒?dòng),接下來(lái),我們使用Pygame制作“嫦娥奔月”小游戲,感興趣的朋友可以自己動(dòng)手試一試
    2023-09-09
  • Python繪制堆疊柱狀圖的實(shí)例

    Python繪制堆疊柱狀圖的實(shí)例

    今天小編就為大家分享一篇Python繪制堆疊柱狀圖的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07

最新評(píng)論