【tiny-dnn】学習を中断させたいとき
六花です。
バッチ正規化層を導入すると重みの初期値の影響が下がるといわれていますが、やはり時によって成績の良いときと悪いときがあります。
改善する方法があれば良いのですが、私の知識では芳しくない成績のもので頑張って学習を続けても、さほど優秀にはなってくれません。
そこで、しばらく学習させてみて芳しくない場合は学習を終了してやり直す、という方法を考えました。
tiny-dnnで学習を中断させる場合は、割り込み処理とstop_ongoing_trainingを使います。
(一般的な使用方法としては「早期終了」だと思います。)
while(true)
{
//----------------------
// この部分でnetを定義する
//-----------------------
tiny_dnn::network<tiny_dnn::sequential> net;
{
net << tiny_dnn::fully_connected_layer(10, 50);
net << tiny_dnn::tanh_layer();
net << tiny_dnn::fully_connected_layer(50, 31);
net << tiny_dnn::softmax_layer();
}
auto onBatchEnumerate = [&]()
{
};
auto onEpochEnumerate = [&]()
{
// なんかダメだった時
bool retry = true;
if(retry)
{
// 学習を終了する
net.stop_ongoing_training();
}
};
// 学習実行
net.train<tiny_dnn::cross_entropy_multiclass>(optimizer, input_train, label_train, 64, 3, onBatchEnumerate, onEpochEnumerate);
}