簡體   English   中英

具有張量流keras模型的動態歷元數

[英]Dynamic number of epochs with a tensorflow keras model

我希望有一個神經網絡訓練,直到達到一定的准確度。 是否有內置功能可以使用而不是單獨運行每個時期,直到達到准確度?

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation=tf.nn.relu),
    keras.layers.Dense(128, activation=tf.nn.relu),
    keras.layers.Dense(128, activation=tf.nn.relu),
    keras.layers.Dense(128, activation=tf.nn.relu),
    keras.layers.Dense(10, activation=tf.nn.softmax)
])

model.compile(optimizer=tf.train.AdamOptimizer(), loss='sparse_categorical_crossentropy', metrics=['accuracy'])

epochs = 0
train_acc = 0
while 1-train_acc > .01:
    model.fit(train_images, train_labels,  initial_epoch=epochs, epochs=epochs+1,verbose=0)
    epochs += 1
    train_loss, train_acc = model.evaluate(train_images,train_labels)

不,沒有任何內置功能可以做到這一點。 但是,您可以輕松定義一旦訓練准確度達到某個閾值就停止訓練的自定義回調:

import keras


class AccuracyStopping(keras.callbacks.Callback):
    def __init__(self, acc_threshold):
        super(AccuracyStopping, self).__init__()
        self._acc_threshold = acc_threshold

    def on_epoch_end(self, batch, logs={}):
        train_acc = logs.get('acc')
        self.model.stop_training = 1 - train_acc <= self._acc_threshold

這是一個顯示如何使用它的簡單示例:

import numpy as np
from keras.layers import Dense
from keras.models import Sequential

x = np.random.normal(size=(100,))
y = x > 0

model = Sequential()
model.add(Dense(1, input_dim=1, activation='sigmoid'))
model.compile('sgd', 'binary_crossentropy', metrics=['accuracy'])

acc_callback = AccuracyStopping(0.05)
model.fit(x, y, batch_size=8, epochs=1000, callbacks=[acc_callback])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM