Skip to content

Commit 72cd976

Browse files
authored
Release v0.2.0 (#174)
* Improve links in tabular tutorial * bump version * add more links to Changelog * fix method finding bug
1 parent ea6c096 commit 72cd976

File tree

4 files changed

+20
-19
lines changed

4 files changed

+20
-19
lines changed

CHANGELOG.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
11
# Changelog
2+
23
All notable changes to this project will be documented in this file.
34

45
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
56
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
67

7-
## [Unreleased] - 2020-07-32 – now
8+
## 0.2.0
89

910
### Added
1011

1112
- High-level API "FasterAI"
1213
- dataset recipes
1314
- learning method helpers
14-
- Find datasets and learning methods based on `Block`s: `finddataset`, `findlearningmethods`
15-
- `loaddataset` for quickly loading data containers from configured recipes
15+
- Find datasets and learning methods based on `Block`s: [`finddatasets`](https://fluxml.ai/FastAI.jl/dev/REFERENCE/FastAI.Datasets.Datasets.finddatasets.html), [`findlearningmethods`](https://fluxml.ai/FastAI.jl/dev/REFERENCE/FastAI.findlearningmethods.html)
16+
- [`loaddataset`](https://fluxml.ai/FastAI.jl/dev/REFERENCE/FastAI.Datasets.Datasets.loaddataset.html) for quickly loading data containers from configured recipes
1617
- Data container recipes (`DatasetRecipe`, `loadrecipe`)
1718
- Documentation setions for FasterAI interfaces:
1819
- [Discovery](https://fluxml.ai/FastAI.jl/dev/docs/discovery.md.html)
1920
- [Blocks and encodings](https://fluxml.ai/FastAI.jl/dev/docs/background/blocksencodings.md.html)
2021
- New interfaces
2122
- `blockbackbone` creates a default backbone for an input block
2223
- Support for tabular data along with recipes and learning methods:
23-
- [`TabularPreprocessing`], [`TableRow`], [`TableDataset`], [`TabularClassificiationSingle`], [`TabularRegression`]
2424
- [Tabular classification tutorial](https://fluxml.ai/FastAI.jl/dev/notebooks/tabularclassification.ipynb.html)
25+
- [`TabularPreprocessing`](https://fluxml.ai/FastAI.jl/dev/REFERENCE/FastAI.TabularPreprocessing.html), [`TableRow`](https://fluxml.ai/FastAI.jl/dev/REFERENCE/FastAI.TableRow.html), [`TableDataset`](https://fluxml.ai/FastAI.jl/dev/REFERENCE/FastAI.Datasets.TableDataset.html), [`TabularClassificiationSingle`](https://fluxml.ai/FastAI.jl/dev/REFERENCE/FastAI.TabularClassificationSingle.html), [`TabularRegression`](https://fluxml.ai/FastAI.jl/dev/REFERENCE/FastAI.TabularRegression.html)
2526

2627

2728
### Changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "FastAI"
22
uuid = "5d0beca9-ade8-49ae-ad0b-a3cf890e669f"
33
authors = ["Lorenz Ohly", "Julia Community"]
4-
version = "0.1.0"
4+
version = "0.2.0"
55

66
[deps]
77
Animations = "27a7e980-b3e6-11e9-2bcd-0b925532e340"

notebooks/tabularclassification.ipynb

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
"id": "19f9ec64",
3737
"metadata": {},
3838
"source": [
39-
"We can quickly download and get the path of any dataset from fastai by using `datasetpath`. Once we have the path, we'll load the data in a `TableContainer`. By default, if we pass in just the path to `TableContainer`, the data is loaded in a `DataFrame`, but we can use any package for accessing our data, and pass an object satisfying the Tables.jl interface to it."
39+
"We can quickly download and get the path of any dataset from fastai by using [`datasetpath`](#). Once we have the path, we'll load the data in a [`TableDataset`](#). By default, if we pass in just the path to [`TableDataset`](#), the data is loaded in a `DataFrame`, but we can use any package for accessing our data, and pass an object satisfying the [Tables.jl](https://github.com/JuliaData/Tables.jl) interface to it."
4040
]
4141
},
4242
{
@@ -91,7 +91,7 @@
9191
"id": "bd63b82d",
9292
"metadata": {},
9393
"source": [
94-
"In case our data was present in a different format for eg. parquet, it could be loaded in a TableContainer as shown below."
94+
"In case our data was present in a different format for eg. parquet, it could be loaded into a data container as follows:"
9595
]
9696
},
9797
{
@@ -110,7 +110,7 @@
110110
"id": "a77c191c",
111111
"metadata": {},
112112
"source": [
113-
"`mapobs` is used here to split our target column from the rest of the row in a lazy manner."
113+
"[`mapobs`](#) is used here to split our target column from the rest of the row in a lazy manner, so that each observation consists of a row of inputs and a target variable."
114114
]
115115
},
116116
{
@@ -130,11 +130,11 @@
130130
"source": [
131131
"To create a learning method for tabular classification task, we need an input block, an output block, and the encodings to be performed on the data.\n",
132132
"\n",
133-
"The input block here is a `TableRow` which contains information about the nature of the columns (ie. categorical or continuous) along with an indexable collection mapping categorical column names to a collection with distinct classes in that column. We can get this mapping by using the `gettransformationdict` method with `DataAugmentation.Categorify`.\n",
133+
"The input block here is a [`TableRow`](#) which contains information about the nature of the columns (ie. categorical or continuous) along with an indexable collection mapping categorical column names to a collection with distinct classes in that column. We can get this mapping by using the `gettransformationdict` method with [`DataAugmentation.Categorify`](#).\n",
134134
"\n",
135-
"The outblock block used is `Label` for single column classification and the unique classes have to passed to it.\n",
135+
"The outblock block used is [`Label`](#) for single column classification and the unique classes have to passed to it.\n",
136136
"\n",
137-
"This is followed by the encodings which needs to be applied on our input and output blocks. For the input block, we have used the `gettransforms` function here to get a standard bunch of transformations to apply, but this can be easily customized by passing in any tabular transformation from DataAugmentation.jl or a composition of those, to `TabularPreprocessings`. In addition to this, we have just one-hot encoded the outblock."
137+
"This is followed by the encodings which needs to be applied on our input and output blocks. For the input block, we have used the `gettransforms` function here to get a standard bunch of transformations to apply, but this can be easily customized by passing in any tabular transformation from DataAugmentation.jl or a composition of those, to [`TabularPreprocessing`](#). In addition to this, we have just one-hot encoded the outblock."
138138
]
139139
},
140140
{
@@ -193,7 +193,7 @@
193193
"id": "ad69519e",
194194
"metadata": {},
195195
"source": [
196-
"In case our initial problem wasn't a classification task, and we had a continuous target column, we would need to perform tabular regression. To create a learning method suitable for regression, we use a `Continuous` block for representing our target column. This can be done even with multiple continuous target columns by just passing the number of columns in `Continuous`. For example, the method here could be used for 3 targets."
196+
"In case our initial problem wasn't a classification task, and we had a continuous target column, we would need to perform tabular regression. To create a learning method suitable for regression, we use a [`Continuous`](#) block for representing our target column. This can be done even with multiple continuous target columns by just passing the number of columns in `Continuous`. For example, the method here could be used for 3 targets."
197197
]
198198
},
199199
{
@@ -218,7 +218,7 @@
218218
"id": "5a1d9474",
219219
"metadata": {},
220220
"source": [
221-
"To get an overview of the learning method created, and as a sanity test, we can use the `describemethod` function. This shows us what encodings will be applied to which blocks, and how the predicted ŷ values are decoded."
221+
"To get an overview of the learning method created, and as a sanity test, we can use [`describemethod`](#). This shows us what encodings will be applied to which blocks, and how the predicted ŷ values are decoded."
222222
]
223223
},
224224
{
@@ -321,7 +321,7 @@
321321
"id": "bb9da109",
322322
"metadata": {},
323323
"source": [
324-
"`getobs` gets us a row of data from the `TableContainer`, which we encode here. This gives us a tuple with the input and target. The input here is again a tuple, containing the categorical values (which have been label encoded or \"categorified\") and the continuous values (which have been normalized and any missing values have been filled). "
324+
"`getobs` gets us a row of data from the `TableDataset`, which we encode here. This gives us a tuple with the input and target. The input here is again a tuple, containing the categorical values (which have been label encoded or \"categorified\") and the continuous values (which have been normalized and any missing values have been filled). "
325325
]
326326
},
327327
{
@@ -376,7 +376,7 @@
376376
"id": "b7105af7",
377377
"metadata": {},
378378
"source": [
379-
"To quickly get a model suitable for our learning method, we can use the `methodmodel` function."
379+
"To get a model suitable for our learning method, we can use [`methodmodel`](#) which constructs a suitable model based on the target block. "
380380
]
381381
},
382382
{
@@ -436,7 +436,7 @@
436436
"id": "0fb73fd4",
437437
"metadata": {},
438438
"source": [
439-
"It is really simple to create a custom backbone using the functions present in `FastAI.Models`."
439+
"Of course you can also create a custom backbone using the functions present in `FastAI.Models`."
440440
]
441441
},
442442
{
@@ -521,7 +521,7 @@
521521
"id": "22eb6dc7",
522522
"metadata": {},
523523
"source": [
524-
"To directly get a `Learner` suitable for our method and data, we can use the `methodlearner` function. "
524+
"To directly get a [`Learner`](#) suitable for our method and data, we can use the [`methodlearner`](#) function. This creates both batched data loaders and a model for us."
525525
]
526526
},
527527
{
@@ -552,7 +552,7 @@
552552
"id": "d5b4b0be",
553553
"metadata": {},
554554
"source": [
555-
"Once we have our learner, we can just call [`fitonecycle!`](#) on it to train it for the desired number of epochs."
555+
"Once we have a `Learner`, we can call [`fitonecycle!`](#) on it to train it for the desired number of epochs:"
556556
]
557557
},
558558
{

src/fasterai/methodregistry.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ julia> findlearningmethods((Image, Any))
3636
```
3737
"""
3838
function findlearningmethods(reg::LearningMethodRegistry, blocktypes=Any)
39-
return [methodfn for (methodfn, methodblocks) in reg.methods if typify(blocktypes) <: methodblocks]
39+
return [methodfn for (methodfn, methodblocks) in reg.methods if methodblocks <: typify(blocktypes)]
4040
end
4141

4242

0 commit comments

Comments
 (0)