Added default num_timesteps to CropHarvestEval to fix validation while running train.py.
The num_timesteps field is not initialized in the CropHarvestMultiClassValidation subclass that is used for validation, but the finetuning_results method calls truncate_timesteps which accesses the field.
5 made the TreeSat eval task multilabel, causing the sigmoid in FinetuningHead not to be applied anymore. However, TreeSatEval still used pytorch's BCELoss which expects inputs to be in [0, 1]. This PR changes TreeSatEval to use BCEWithLogitsLoss instead.
Further regarding TreeSat having been made multilabel: sklearn's LogisticRegression doesn’t support multilabel tasks, its .fit(X, y) takes y with shape (n_samples,). See the discussion here. To keep using logistic regression, I wrapped the estimator in a sklearn.multioutput.MultiOutputClassifier which will fit one classifier per target.
Added default
num_timesteps
to CropHarvestEval to fix validation while runningtrain.py
. The num_timesteps field is not initialized in theCropHarvestMultiClassValidation
subclass that is used for validation, but thefinetuning_results
method callstruncate_timesteps
which accesses the field.5 made the TreeSat eval task multilabel, causing the sigmoid in
FinetuningHead
not to be applied anymore. However, TreeSatEval still used pytorch'sBCELoss
which expects inputs to be in [0, 1]. This PR changes TreeSatEval to useBCEWithLogitsLoss
instead.Further regarding TreeSat having been made multilabel: sklearn's
LogisticRegression
doesn’t support multilabel tasks, its.fit(X, y)
takes y with shape(n_samples,)
. See the discussion here. To keep using logistic regression, I wrapped the estimator in asklearn.multioutput.MultiOutputClassifier
which will fit one classifier per target.