Releases: skorch-dev/skorch
Version 0.7.0
Version 0.7.0
Notable additions are TensorBoard support through a callback and several improvements to the NeuralNetClassifier
and NeuralNetBinaryClassifier
to make them more compatible with sklearn metrics and packages by adding support for class inference among other things. We are actively pursuing some bigger topics which did not fit in this release such as scoring caching improvements (#557), a DataFrameTransformer (#507) and improvements to the training loop layout (#564) which we hope to bring to the next release.
WARNING: In a future release, the behavior of method net.get_params
will change to make it more consistent with sklearn: it will no longer return "learned" attributes like module_
. Therefore, functions like sklearn.base.clone
, when called with a fitted net, will no longer return a fitted net but instead an uninitialized net. If you want a copy of a fitted net, use copy.deepcopy
instead. Note that net.get_params
is used under the hood by many sklearn functions and classes, such as GridSearchCV
, whose behavior may thus be affected by the change. (#521, #527)
We had an influx of new contributors and users whom we thank for their support by adding pull requests and filing issues! Most notably, thanks to the individual contributors that made this release possible:
- Alexander Kolb
- Janaki Sheth
- Joshy Cyriac
- Matthias Gazzari
- Sergey Alexandrov
- Thomas Fan
- Zhao Meng
Here is a list of all the changes and their coresponding ticket numbers in detail:
Added
- More careful check for wrong parameter names being passed to
NeuralNet
(#500) - More helpful error messages when trying to predict using an uninitialized model
- Add
TensorBoard
callback for automatic logging to tensorboard - Make
NeuralNetBinaryClassifier
work withsklearn.calibration.CalibratedClassifierCV
- Improve
NeuralNetBinaryClassifier
compatibility with certain sklearn metrics (#515) NeuralNetBinaryClassifier
automatically squeezes module output if necessary (#515)NeuralNetClassifier
now has aclasses_
attribute after fit is called, which is inferred from y by default (#465, #486)NeuralNet.load_params
with a checkpoint now initializes when needed (#497)
Changed
- Improve numerical stability when using
NLLLoss
inNeuralNetClassifer
(#491) - Refactor code to make gradient accumulation easier to implement (#506)
NeuralNetBinaryClassifier.predict_proba
now returns a 2-dim array; to access the "old"y_proba
, takey_proba[:, 1]
(#515)net.history
is now a property that accessesnet.history_
, which stores theHistory
object (#527)- Remove deprecated
skorch.callbacks.CyclicLR
, usetorch.optim.lr_scheduler.CyclicLR
instead
Future Changes
- WARNING: In a future release, the behavior of method
net.get_params
will change to make it more consistent with sklearn: it will no longer return "learned" attributes likemodule_
. Therefore, functions likesklearn.base.clone
, when called with a fitted net, will no longer return a fitted net but instead an uninitialized net. If you want a copy of a fitted net, usecopy.deepcopy
instead. Note thatnet.get_params
is used under the hood by many sklearn functions and classes, such asGridSearchCV
, whose behavior may thus be affected by the change. (#521, #527)
Fixed
Version 0.6.0
[0.6.0] - 2019-07-19
This release introduces convenience features such as SliceDataset
which makes using torch datasets (e.g. from torchvision) easier in combination with sklearn features such as GridSearchCV
. There was also some work to make the transition from CUDA trained models to CPU smoother and learning rate schedulers were upgraded to use torch builtin functionality.
Here's the full list of changes:
Added
- Adds FAQ entry regarding the initialization behavior of
NeuralNet
when passed instantiated models. (#409) - Added CUDA pickle test including an artifact that supports testing on CUDA-less CI machines
- Adds
train_batch_count
andvalid_batch_count
to history in training loop. (#445) - Adds score method for
NeuralNetClassifier
,NeuralNetBinaryClassifier
, andNeuralNetRegressor
(#469) - Wrapper class for torch Datasets to make them work with some sklearn features (e.g. grid search). (#443)
Changed
- Repository moved to https://github.com/skorch-dev/skorch/, please change your git remotes
- Treat cuda dependent attributes as prefix to cover values set using
set_params
since
previously"criterion_"
would not matchnet.criterion__weight
as set by
net.set_params(criterion__weight=w)
- skorch pickle format changed in order to improve CUDA compatibility, if you have pickled models, please re-pickle them to be able to load them in the future
net.criterion_
and its parameters are now moved to target device when using criteria that inherit fromtorch.nn.Module
. Previously the user had to make sure that parameters such as class weight are on the compute device- skorch now assumes PyTorch >= 1.1.0. This mainly affects learning rate schedulers, whose inner workings have been changed with version 1.1.0. This update will also invalidate pickled skorch models after a change introduced in PyTorch optimizers.
Fixed
- Include requirements in MANIFEST.in
- Add
criterion_
toNeuralNet.cuda_dependent_attributes_
to avoid issues with criterion
weight tensors from, e.g.,NLLLoss
(#426) TrainEndCheckpoint
can be cloned bysklearn.base.clone
. (#459)
Thanks to all the contributors:
- Bram Vanroy
- Damien Lancry
- Ethan Rosenthal
- Sergey Alexandrov
- Thomas Fan
- Zayd Hammoudeh
Version 0.5.0
Version 0.5.0
Added
- Basic usage notebook now runs on Google Colab
- Advanced usage notebook now runs on Google Colab
- MNIST with scikit-learn and skorch now runs on Google Colab
- Better user-facing messages when module or optimizer are re-initialized
- Added an experimental API (
net._register_virtual_param
) to register "virtual"
parameters on the network with custom setter functions. (#369) - Setting parameters
lr
,momentum
,optimizer__lr
, etc. no longer resets
the optmizer. As of now you can donet.set_params(lr=0.03)
or
net.set_params(optimizer__param_group__0__momentum=0.86)
without triggering
a re-initialization of the optimizer (#369) - Support for scipy sparse CSR matrices as input (as, e.g., returned by sklearn's
CountVectorizer
); note that they are cast to dense matrices during batching - Helper functions to build command line interfaces with almost no
boilerplate, example that shows usage
Changed
- Reduce overhead of
BatchScoring
when usingtrain_loss_score
orvalid_loss_score
by skipping superfluous inference step (#381) - The
on_grad_computed
callback function will yield an iterable fornamed_parameters
only when it is used to reduce the run-time overhead of the call (#379) - Default
fn_prefix
inTrainEndCheckpoint
is nowtrain_end_
(#391) - Issues a warning when
Checkpoints
'smonitor
parameter is set tomonitor
and the history contains<monitor>_best
. (#399)
Fixed
Version 0.4.0
Organisational
From now on we will organize a change log and document every change directly. If
you are a contributor we encourage you to document your changes directly in the
change log when submitting a PR to reduce friction when preparing new releases.
Added
- Support for PyTorch 0.4.1
- There is no need to explicitly name callbacks anymore (names are assigned automatically, name conflicts are resolved).
- You can now access the training data in the
on_grad_computed
event - There is a new image segmentation example
- Easily create toy network instances for quick experiments using
skorch.toy.make_classifier
and friends - New
ParamMapper
callback to modify/freeze/unfreeze parameters at certain point in time during training:
>>> from sklearn.callbacks import Freezer, Unfreezer
>>> net = Net(module, callbacks=[Freezer('layer*.weight'), Unfreezer('layer*.weight', at=10)])
- Refactored
EpochScoring
for easier sub-classing Checkpoint
callback now supports saving the optimizer, this avoids problems with stateful
optimizers such asAdam
orRMSprop
(#360)- Added
LoadInitState
callback for easy continued training from checkpoints (#360) NeuralNetwork.load_params
now supports loading fromCheckpoint
instances- Added documentation for saving and loading highlighting the new features
Changed
- The
ProgressBar
callback now determines the batches per epoch automatically by default (batches_per_epoch=auto
) - The
on_grad_computed
event now has access to the current training data batch
Deprecated
- Deprecated
filtered_optimizer
in favor ofFreezer
callback (#346) NeuralNet.load_params
andNeuralNet.save_params
deprecatef
parameter for the sake
off_optimizer
,f_params
andf_history
(#360)
Removed
skorch.net.NeuralNetClassifier
andskorch.net.NeuralNetRegressor
are removed.
Usefrom skorch import NeuralNetClassifier
orskorch.NeuralNetClassifier
instead.
Fixed
uses_placeholder_y
should not require existence ofy
field (#311)- LR scheduler creates
batch_idx
on first run (#314) - Use
OrderedDict
for callbacks to fix python 3.5 compatibility issues (#331) - Make
to_tensor
work correctly withPackedSequence
(#335) - Rewrite
History
to not use any recursion to avoid memory leaks during exceptions (#312) - Use
flaky
in some neural network tests to hide platform differences - Fixes ReduceLROnPlateau when mode == max (#363)
- Fix disconnected weights between net and optimizer after copying the net with
copy.deepcopy
(#318) - Fix a bug that interfered with loading CUDA models when the model was a CUDA tensor but
the net was configured to use the CPU (#354, #358)
Contributors
Again we'd like to thank all the contributors for their awesome work.
Thank you
- Andrew Spott
- Dave Hirschfeld
- Scott Sievert
- Sergey Alexandrov
- Thomas Fan
v0.3.0
Features
- significantly reduced overhead of skorch over pytorch for small/medium loads
- predefined splits are easier to use (
skorch.helper.predefined_split
) - freezing layers is now easier with
skorch.helper.filtered_optimizer
- introduce
NeuralNetBinaryClassifier
- introduce early stopping callback
- support parallel grid search using Dask
- support for LBFGS
- history can be saved/loaded independently
- learning rate scheduler have a method to simulate behavior
Checkpoint
callback supports pickling and history savingCheckpoint
callback is less noisy- added transfer learning tutorial
- added tutorial how to expose skorch via REST API
- improved documentation
API changes
train_step
is now split intrain_step
andtrain_step_single
in order to support LBFGS, wheretrain_step_single
takes the role of your typical training inner-loop when writing PyTorch modelsdevice
parameter onskorch.dataset.Dataset
is now deprecatedCheckpoint
parametertarget
is deprecated in favor off_params
Contributors
A big thanks to our contributors who helped making this release possible:
- Andrew Spott
- Scott Sievert
- Sergey Alexandrov
- Thomas Fan
- Tomasz Pietruszka
v0.2.0
Features
- PyTorch 0.4 support
- Add
GradNormClipping
callback - Add generic learning rate scheduler callback
- Add
CyclicLR
learning rate scheduler - Add
WarmRestartLR
learning rate scheduler - Scoring callbacks now re-use predictions, accelerating training
fit()
and inference methods (e.g.,predict()
) now supporttorch.util.data.Dataset
as input as long as(X, y)
pairs are returnedforward
andforward_iter
now allow you to specify on which device to store intermediate predictions- Support for setting optimizer param groups using wildcards (e.g.,
{'layer*.bias': {'lr': 0}}
) - Computed gradients can now be processed by callbacks using
on_grad_computed
- Support for
fit_params
parameter which gets passed directly to the module - Add
skorch.helper.SliceDict
so that you can usedict
asX
with sklearn'sGridSearchCV
, etc. - Add
Dockerfile
API changes
- Deprecated
use_cuda
parameter in favor ofdevice
parameter skorch.utils.to_var
is gone in favor ofskorch.utils.to_tensor
training_step
andvalidation_step
now return adict
with the loss and the module's predictionpredict
andpredict_proba
now handle multiple outputs by assuming the first output to be the predictionNeuralNetClassifier
now only takeslog
of prediction if the criterion is set toNLLLoss
Examples
- RNN sentiment classification
Communication
- We now run the
#skorch
channel on the PyTorch slack workspace
Contributors
A big thanks to our contributors who helped making this release possible:
- Felipe Ribeiro
- Grzegorz Rygielski
- Juri Paern
- Thomas Fan