From 9614b7651ff9cf25e87de21aa8a95e8d23ab476c Mon Sep 17 00:00:00 2001
From: autodocs tf
on a model to convert it to a model of that kind:
mxmodel = mxnet(model, (10, 1))
+mxmodel = mxnet(model)
mxmodel(xs) #> [0.0650, 0.0655, ...]
# or
tfmodel = tf(model)
diff --git a/latest/apis/batching.html b/latest/apis/batching.html
index 568ee32d..ab27a571 100644
--- a/latest/apis/batching.html
+++ b/latest/apis/batching.html
@@ -155,7 +155,7 @@ Batching
-
+
diff --git a/latest/apis/storage.html b/latest/apis/storage.html
index 8fcbd578..50c03267 100644
--- a/latest/apis/storage.html
+++ b/latest/apis/storage.html
@@ -139,7 +139,7 @@ Storing Models
-
+
diff --git a/latest/contributing.html b/latest/contributing.html
index a7d2e162..41f109dd 100644
--- a/latest/contributing.html
+++ b/latest/contributing.html
@@ -136,7 +136,7 @@ Contributing & Help
-
+
diff --git a/latest/examples/char-rnn.html b/latest/examples/char-rnn.html
index ba581de6..10acd4ba 100644
--- a/latest/examples/char-rnn.html
+++ b/latest/examples/char-rnn.html
@@ -139,7 +139,7 @@ Char RNN
-
+
diff --git a/latest/examples/logreg.html b/latest/examples/logreg.html
index c3ad6f90..44f51053 100644
--- a/latest/examples/logreg.html
+++ b/latest/examples/logreg.html
@@ -139,7 +139,7 @@ Logistic Regression
-
+
diff --git a/latest/index.html b/latest/index.html
index 479184c6..d146022a 100644
--- a/latest/index.html
+++ b/latest/index.html
@@ -147,7 +147,7 @@ Home
-
+
diff --git a/latest/internals.html b/latest/internals.html
index 3b5298e8..c6cb1537 100644
--- a/latest/internals.html
+++ b/latest/internals.html
@@ -136,7 +136,7 @@ Internals
-
+
diff --git a/latest/models/basics.html b/latest/models/basics.html
index d79e93c4..f9c79ddb 100644
--- a/latest/models/basics.html
+++ b/latest/models/basics.html
@@ -155,7 +155,7 @@ Model Building Basics
-
+
diff --git a/latest/models/debugging.html b/latest/models/debugging.html
index 04b3ac9d..7ecfca44 100644
--- a/latest/models/debugging.html
+++ b/latest/models/debugging.html
@@ -139,7 +139,7 @@ Debugging
-
+
@@ -167,16 +167,18 @@ end
model = TLP(Affine(10, 20), Affine(21, 15))
-mxmodel = mxnet(model, (10, 1))
+mxmodel = mxnet(model)
+
+mxmodel(rand(10))
Unfortunately, this model has a (fairly obvious) typo, which means that the code above won't run. Instead we get an error message:
-InferShape Error in dot5: [20:37:39] src/operator/./matrix_op-inl.h:271:
-Check failed: (lshape[1]) == (rshape[0]) dot shape error: (15,21) X (20,1)
- in Flux.Affine at affine.jl:8
- in TLP at test.jl:6
- in mxnet(::TLP, ::Tuple{Int64,Int64}) at model.jl:40
- in mxnet(::TLP, ::Vararg{Any,N} where N) at backend.jl:20
+Error in operator dot2: [21:28:21] src/operator/tensor/./matrix_op-inl.h:460:
+Check failed: lshape[1] == rshape[0] (20 vs. 21) dot shape error: (1,20) X (21,15)
+Flux.Affine at affine.jl:8
+TLP at basic.jl:6
+(::Flux.MX.Model)(::Flux.Batch{Array{Float64,1},Array{Float64,2}}) at model.jl:105
+(::Flux.MX.Model)(::Array{Float64,1}) at model.jl:107
Most frameworks would only give the error message here – not so helpful if you have thousands of nodes in your computational graph. However, Flux is able to give good error reports diff --git a/latest/models/recurrent.html b/latest/models/recurrent.html index c417d86f..2b025cf7 100644 --- a/latest/models/recurrent.html +++ b/latest/models/recurrent.html @@ -139,7 +139,7 @@ Recurrence - + diff --git a/latest/models/templates.html b/latest/models/templates.html index 43ecfe45..a4a8bd85 100644 --- a/latest/models/templates.html +++ b/latest/models/templates.html @@ -155,7 +155,7 @@ Model Templates - + diff --git a/latest/search_index.js b/latest/search_index.js index 4cbc7fa1..c1fba779 100644 --- a/latest/search_index.js +++ b/latest/search_index.js @@ -141,7 +141,7 @@ var documenterSearchIndex = {"docs": [ "page": "Debugging", "title": "Debugging Models", "category": "section", - "text": "Let's take our two-layer perceptron as an example again, running on MXNet:@net type TLP\n first\n second\n function (x)\n l1 = σ(first(x))\n l2 = softmax(second(l1))\n end\nend\n\nmodel = TLP(Affine(10, 20), Affine(21, 15))\n\nmxmodel = mxnet(model, (10, 1))Unfortunately, this model has a (fairly obvious) typo, which means that the code above won't run. Instead we get an error message:InferShape Error in dot5: [20:37:39] src/operator/./matrix_op-inl.h:271:\nCheck failed: (lshape[1]) == (rshape[0]) dot shape error: (15,21) X (20,1)\n in Flux.Affine at affine.jl:8\n in TLP at test.jl:6\n in mxnet(::TLP, ::Tuple{Int64,Int64}) at model.jl:40\n in mxnet(::TLP, ::Vararg{Any,N} where N) at backend.jl:20Most frameworks would only give the error message here – not so helpful if you have thousands of nodes in your computational graph. However, Flux is able to give good error reports even when no Julia code has been run, e.g. when running on a backend like MXNet. This enables us to pinpoint the source of the error very quickly even in a large model.In this case, we can immediately see that the error occurred within an Affine layer. There are two such layers, but this one was called from the second line of TLP, so it must be the second Affine layer we defined. The layer expected an input of length 21 but got 20 instead.Of course, often a stack trace isn't enough to figure out the source of an error. Another option is to simply step through the execution of the model using Gallium. While handy, however, stepping isn't always the best way to get a \"bird's eye view\" of the code. For that, Flux provides a macro called @shapes:julia> @shapes model(rand(5,10))\n\n# /Users/mike/test.jl, line 18:\ngull = σ(Affine(10, 20)(Input()[1]::(5,10))::(5,20))::(5,20)\n# /Users/mike/.julia/v0.6/Flux/src/layers/affine.jl, line 8:\nlobster = gull * _::(21,15) + _::(1,15)\n# /Users/mike/test.jl, line 19:\nraven = softmax(lobster)This is a lot like Julia's own code_warntype; but instead of annotating expressions with types, we display their shapes. As a lowered form it has some quirks; input arguments are represented by Input()[N] and parameters by an underscore.This makes the problem fairly obvious. We tried to multiply the output of the first layer (5, 20) by a parameter (21, 15); the inner dimensions should have been equal.Notice that while the first Affine layer is displayed as-is, the second was inlined and we see a reference to where the W * x + b line was defined in Flux's source code. In this way Flux makes it easy to drill down into problem areas, without showing you the full graph of thousands of nodes at once.With the typo fixed, the output of @shapes looks as follows:# /Users/mike/test.jl, line 18:\nopossum = σ(Affine(10, 20)(Input()[1]::(5,10))::(5,20))::(5,20)\n# /Users/mike/test.jl, line 19:\nwren = softmax(Affine(20, 15)(opossum)::(5,15))::(5,15)" + "text": "Let's take our two-layer perceptron as an example again, running on MXNet:@net type TLP\n first\n second\n function (x)\n l1 = σ(first(x))\n l2 = softmax(second(l1))\n end\nend\n\nmodel = TLP(Affine(10, 20), Affine(21, 15))\n\nmxmodel = mxnet(model)\n\nmxmodel(rand(10))Unfortunately, this model has a (fairly obvious) typo, which means that the code above won't run. Instead we get an error message:Error in operator dot2: [21:28:21] src/operator/tensor/./matrix_op-inl.h:460:\nCheck failed: lshape[1] == rshape[0] (20 vs. 21) dot shape error: (1,20) X (21,15)\nFlux.Affine at affine.jl:8\nTLP at basic.jl:6\n(::Flux.MX.Model)(::Flux.Batch{Array{Float64,1},Array{Float64,2}}) at model.jl:105\n(::Flux.MX.Model)(::Array{Float64,1}) at model.jl:107Most frameworks would only give the error message here – not so helpful if you have thousands of nodes in your computational graph. However, Flux is able to give good error reports even when no Julia code has been run, e.g. when running on a backend like MXNet. This enables us to pinpoint the source of the error very quickly even in a large model.In this case, we can immediately see that the error occurred within an Affine layer. There are two such layers, but this one was called from the second line of TLP, so it must be the second Affine layer we defined. The layer expected an input of length 21 but got 20 instead.Of course, often a stack trace isn't enough to figure out the source of an error. Another option is to simply step through the execution of the model using Gallium. While handy, however, stepping isn't always the best way to get a \"bird's eye view\" of the code. For that, Flux provides a macro called @shapes:julia> @shapes model(rand(5,10))\n\n# /Users/mike/test.jl, line 18:\ngull = σ(Affine(10, 20)(Input()[1]::(5,10))::(5,20))::(5,20)\n# /Users/mike/.julia/v0.6/Flux/src/layers/affine.jl, line 8:\nlobster = gull * _::(21,15) + _::(1,15)\n# /Users/mike/test.jl, line 19:\nraven = softmax(lobster)This is a lot like Julia's own code_warntype; but instead of annotating expressions with types, we display their shapes. As a lowered form it has some quirks; input arguments are represented by Input()[N] and parameters by an underscore.This makes the problem fairly obvious. We tried to multiply the output of the first layer (5, 20) by a parameter (21, 15); the inner dimensions should have been equal.Notice that while the first Affine layer is displayed as-is, the second was inlined and we see a reference to where the W * x + b line was defined in Flux's source code. In this way Flux makes it easy to drill down into problem areas, without showing you the full graph of thousands of nodes at once.With the typo fixed, the output of @shapes looks as follows:# /Users/mike/test.jl, line 18:\nopossum = σ(Affine(10, 20)(Input()[1]::(5,10))::(5,20))::(5,20)\n# /Users/mike/test.jl, line 19:\nwren = softmax(Affine(20, 15)(opossum)::(5,15))::(5,15)" }, { @@ -205,7 +205,7 @@ var documenterSearchIndex = {"docs": [ "page": "Backends", "title": "Basic Usage", "category": "section", - "text": "model = Chain(Affine(10, 20), σ, Affine(20, 15), softmax)\nxs = rand(10)Currently, Flux's pure-Julia backend has no optimisations. This means that callingmodel(rand(10)) #> [0.0650, 0.0655, ...]directly won't have great performance. In order to run a computationally intensive training process, we rely on a backend like MXNet or TensorFlow.This is easy to do. Just call either mxnet or tf on a model to convert it to a model of that kind:mxmodel = mxnet(model, (10, 1))\nmxmodel(xs) #> [0.0650, 0.0655, ...]\n# or\ntfmodel = tf(model)\ntfmodel(xs) #> [0.0650, 0.0655, ...]These new models look and feel exactly like every other model in Flux, including returning the same result when you call them, and can be trained as usual using Flux.train!(). The difference is that the computation is being carried out by a backend, which will usually give a large speedup." + "text": "model = Chain(Affine(10, 20), σ, Affine(20, 15), softmax)\nxs = rand(10)Currently, Flux's pure-Julia backend has no optimisations. This means that callingmodel(rand(10)) #> [0.0650, 0.0655, ...]directly won't have great performance. In order to run a computationally intensive training process, we rely on a backend like MXNet or TensorFlow.This is easy to do. Just call either mxnet or tf on a model to convert it to a model of that kind:mxmodel = mxnet(model)\nmxmodel(xs) #> [0.0650, 0.0655, ...]\n# or\ntfmodel = tf(model)\ntfmodel(xs) #> [0.0650, 0.0655, ...]These new models look and feel exactly like every other model in Flux, including returning the same result when you call them, and can be trained as usual using Flux.train!(). The difference is that the computation is being carried out by a backend, which will usually give a large speedup." }, {