/*-
*
* * Copyright 2015 Skymind,Inc.
* *
* * Licensed under the Apache License, Version 2.0 (the "License");
* * you may not use this file except in compliance with the License.
* * You may obtain a copy of the License at
* *
* * http://www.apache.org/licenses/LICENSE-2.0
* *
* * Unless required by applicable law or agreed to in writing, software
* * distributed under the License is distributed on an "AS IS" BASIS,
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* * See the License for the specific language governing permissions and
* * limitations under the License.
*
*/
package org.deeplearning4j.earlystopping.termination;
import java.util.concurrent.TimeUnit;
/**Terminate training based on max time.
*/
public class MaxTimeIterationTerminationCondition implements IterationTerminationCondition {
private long maxTimeAmount;
private TimeUnit maxTimeUnit;
private long initializationTime;
private long endTime;
public MaxTimeIterationTerminationCondition(long maxTimeAmount, TimeUnit maxTimeUnit) {
if (maxTimeAmount <= 0 || maxTimeUnit == null)
throw new IllegalArgumentException(
"Invalid maximum training time: " + "amount = " + maxTimeAmount + " unit = " + maxTimeUnit);
this.maxTimeAmount = maxTimeAmount;
this.maxTimeUnit = maxTimeUnit;
}
@Override
public void initialize() {
initializationTime = System.currentTimeMillis();
endTime = initializationTime + maxTimeUnit.toMillis(maxTimeAmount);
}
@Override
public boolean terminate(double lastMiniBatchScore) {
return System.currentTimeMillis() >= endTime;
}
@Override
public String toString() {
return "MaxTimeIterationTerminationCondition(" + maxTimeAmount + ",unit=" + maxTimeUnit + ")";
}
}