Skip to content

Instantly share code, notes, and snippets.

@oxinabox
Last active June 1, 2017 14:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save oxinabox/f94be468f3b489156a52870e69eab20f to your computer and use it in GitHub Desktop.
Save oxinabox/f94be468f3b489156a52870e69eab20f to your computer and use it in GitHub Desktop.
TensorFlow SVD vs LAPACK SVD
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"TensorFlow's SVD is significantly less accurate than LAPACK's (i.e. Julia's and SciPy's backing library).\n",
"But still incredibly accurate, so probably don't panic.\n",
"Unless your matricies have very large ($>10^6$) values, then the accurasy difference might be relevant for you (but probably isn't).\n",
"However, both LAPACK and TensorFlow are not great then -- LAPACK is still much better.\n",
"<!--more-->\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"TensorFlow.jl recently [gained bindings](https://github.com/malmaud/TensorFlow.jl/pull/240) for the SVD operation.\n",
"This came as a result of [@malmaud's](https://github.com/malmaud) great work to automatically [creates bindings](https://github.com/malmaud/TensorFlow.jl/issues/195) for all the ops defined by the Tensorflow backend (It is pretty awesome).\n",
"Some may be surprised to find that TensorFlow supports [single value decomposition(SVD)](https://en.wikipedia.org/wiki/Singular_value_decomposition) at all.\n",
"Afterall, isn't it a neural network library?\n",
"My response to that, which I have said before and will say again,\n",
"is that TensorFlow is (effectively) a linear algebra library with automatic differentiation and GPU support.\n",
"And having those features, makes it great for implementing neural networks.\n",
"But it has more general functionality that you would every expect.\n",
"SVD is one of those features; though I am sure it does have a collection of uses for neural networks -- using it to implement PCA for dimentionality reduction as preprocessing comes to mind.\n",
"\n",
"\n",
"After I had added the binding, to match julia's return value ordering for `Base.svd`,\n",
"I wanted to add a test to make sure it was working correctly.\n",
"As there are multiple different correct SVD solutions for a given input $M$ I can't just directly check the returned $U,S,V$ against those resturned by julia's `svd`.\n",
"So instead we want to use $U,S,V$ to reconstruct $M$ and test that that reconstruction is close-enough\n",
"$$M\\approx U\\;\\mathrm{diagm}(S)\\;V'$$\n",
"Then what is close enough? \n",
"Being as close as julia's SVD gets makes sense.\n",
"But when I tested that, it was failing,\n",
"so I thought I would give it some slack: allowing 2 times the error.\n",
"But on testing that, it wasn't enough slack and the tests failed, so I gave it more (after checking the results did at least make sense).\n",
"I ended up allowing 100 times as much reconstruction error, though this may have been a bit much.\n",
"Bases on this, I thought I would investigate closer.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"These observations are based on TensorFlow.jl, and Julia, but they really apply to any TensorFlow library,and almost any scientific computing library.\n",
"All the language specific TensorFlow libraries delegate their operations to the same C/C++ backend.\n",
"Most scientific computing software delegates their linear algrebra routines to some varient of [LAPACK](https://en.wikipedia.org/wiki/LAPACK); not just Julia and SciPy, but also commerial products like [MatLab](https://au.mathworks.com/company/newsletters/articles/matlab-incorporates-lapack.html), and [Mathematica](https://reference.wolfram.com/language/tutorial/LinearAlgebraMatrixComputations.html).\n",
"I'm using TensorFlow.jl and Julia because that is what I am most familar with.\n",
"\n",
"\n",
"There are of-course a [variety of algorithms and variations to those algoriths](https://en.wikipedia.org/wiki/Singular_value_decomposition#Calculating_the_SVD) for calculating SVD.\n",
"It will become obvious that TensorFlow and LAPACK are using different ones.\n",
"I'll also pointout that there is another implementation in [IterativeSolves.jl](https://en.wikipedia.org/wiki/Singular_value_decomposition#Calculating_the_SVD).\n",
"I am not going to go into any detail on the differences -- I am no serious numerical computation linear-algebraist; I go and bug applied mathematicians when I need to know that kind of stuff. \n",
"\n",
"Here we are just looking at the implementations from the outside.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"If you want to look into TensorFlow's accurasy checks, I am aware some of the tests for it acan be found on [their github](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/kernel_tests/svd_op_test.py). It is checking 32bit floats with a tolerance of $10^{-5}$ and 64 bit floats with a tolerance of $10^{-14}$, I think that is with sum of errors.\n",
"\n",
"LAPACK tests are [here](http://www.netlib.org/lapack/testing/svd.in). However, LAPACK has its own Domain Specific Language for testing, and I don't speak it at all."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"using TensorFlow\n",
"using Plots\n",
"using DataFrames"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To be clear, since these can change with different LAPACKs, and different TensorFlows, this is what I am running on:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Julia Version 0.5.1\n",
"Commit 6445c82 (2017-03-05 13:25 UTC)\n",
"Platform Info:\n",
" OS: Linux (x86_64-pc-linux-gnu)\n",
" CPU: Intel(R) Xeon(R) CPU E5520 @ 2.27GHz\n",
" WORD_SIZE: 64\n",
" BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY Nehalem)\n",
" LAPACK: libopenblas64_\n",
" LIBM: libopenlibm\n",
" LLVM: libLLVM-3.7.1 (ORCJIT, nehalem)\n"
]
}
],
"source": [
"versioninfo()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"v\"1.0.1\""
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"TensorFlow.tf_version()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Also, it is worth looking at these errors in the context of the [machine epsilon](https://en.wikipedia.org/wiki/Machine_epsilon).\n",
"Most of these errors are far below that; and so don't matter at all."
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1.1920929f-7"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"eps(Float32)"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2.220446049250313e-16"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"eps(Float64)"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"source": [
"First we define a function to conviently call the tensorflow SVD,on a julia matrix.\n",
"This works by adding a `constant` to the graph.\n",
"This leaks memory like crazy, since it adds a new node every time the test is run\n",
"but that does not matter for purposes of our test.\n",
"(But it probably should have been done with a `placeholder` and a feed dictionary)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"sess=Session(Graph())\n",
"svd_tf(m) = run(sess, svd(constant(m)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we define the reconstruction error,\n",
"how we will evalate it.\n",
"We are using squared error:\n",
"$$err(M,U,S,V)=\\sum{(M-U\\;\\mathrm{diagm}(S)\\;V')^2}$$\n",
"We get one error result per matrix per method.\n",
"(So not mean squared error, since we want to look at the error distribution). \n",
"Note that the evaluation happened entirely in julia, except for the SVD itself.\n",
"\n",
"The choice of sum of square error here, rather than sum of error, is perhaps not ideal. \n",
"I'm honestly not sure. \n",
"Sum of error would give a much larger result -- infact almost all the errors would be above the machine epsilon.\n",
"The few papers I have seen evaluating SVD seem to mostly use sum of squared error; but this is not my field."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"recon_err(m, u,s,v) = sum(abs2, m-u*diagm(s)*v')\n",
"recon_err_jl(m) = recon_err(m, svd(m)...)\n",
"recon_err_tf(m) = recon_err(m, svd_tf(m)...)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We define a function to run our trials, and collect the results.\n",
"Note that this takes a function `matrix_dist_fun(T, size)` that is used to generate the data.\n",
"By changing this function we can change the distribution of values in the trial matricies."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"function generate_data(n_samples, matrix_dist_fun, T, size)\n",
" df = DataFrame(err_jl=T[], err_tf=T[])\n",
" for ii in 1:n_samples\n",
" m = matrix_dist_fun(T, size)\n",
" push!(df, Dict(:err_jl => recon_err_jl(m), :err_tf => recon_err_tf(m)))\n",
" end\n",
" df\n",
"end"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here we define the functions to perform our analytics/visualisation.\n",
"I think a histogram showing the distribution of $err_tf/err_jl$ is informative.\n",
"an absolute value histogram would also be informative, but when the values are so low, it become hard to read.\n",
"As well the quartile values, that is minimum, Q1, median, Q3, maximium, are informative on the absolute values of the error; since they tell us that that say three quarters of all trials showed error less than the given value.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"function plot_relative_error_hist(df)\n",
" histogram(df[:err_tf]./df[:err_jl];\n",
" xlabel=\"factor by which Tensorflow error is greater than Julia (LAPACK) error\",\n",
" ylabel=\"number of trials with this error\",\n",
" title=\"Histogram of relative error values for SVD reconstruction\"\n",
" )\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"function quartile_summary(df, field)\n",
" q0 = minimum(df[field])\n",
" q1 = quantile(df[field], 0.25)\n",
" q2 = median(df[field])\n",
" q3 = quantile(df[field], 0.75)\n",
" q4 = maximum(df[field])\n",
" print(\"$field:\\t\")\n",
" @printf(\"Q0=%0.2e\\t Q1=%0.2e\\t Q2=%0.2e\\t Q3=%0.2e\\t Q4=%0.2e\", q0, q1, q2, q3, q4)\n",
" println()\n",
" (q0, q1, q2, q3, q4)\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"function display_evaluation_figures(df)\n",
" quartile_summary(df, :err_jl)\n",
" quartile_summary(df, :err_tf)\n",
" plot_relative_error_hist(df)\n",
"end"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So now onward to the results.\n",
"In the results that follow it can been seen that all the absolute errrors (even for maximum/Q4) are well below the machine epsilon for the type evaluated. (But see close to the bottom where this does not hold).\n",
"It can be seen that it is very rare for TensorFlow to have a lower error than Julia.\n",
"Such results would show up as bar in the histogram at $x<1$.\n",
"Of which there are some, but vanishingly few."
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"err_jl:\tQ0=3.99e-26\t Q1=4.84e-26\t Q2=5.33e-26\t Q3=6.22e-26\t Q4=1.27e-25\n",
"err_tf:\tQ0=7.73e-26\t Q1=1.16e-25\t Q2=1.30e-25\t Q3=1.46e-25\t Q4=5.47e-25\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1m\u001b[34mINFO: binning = auto\n",
"\u001b[0m"
]
},
{
"data": {
"text/html": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 600 400\">\n",
"<defs>\n",
" <clipPath id=\"clip00\">\n",
" <rect x=\"0\" y=\"0\" width=\"600\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"0,400 600,400 600,0 0,0 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip01\">\n",
" <rect x=\"120\" y=\"0\" width=\"421\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"45.8815,369.674 596.063,369.674 596.063,23.3815 45.8815,23.3815 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip02\">\n",
" <rect x=\"45\" y=\"23\" width=\"551\" height=\"347\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 132.231,364.48 132.231,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 250.194,364.48 250.194,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 368.158,364.48 368.158,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 486.121,364.48 486.121,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,369.674 587.81,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,277.892 587.81,277.892 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,186.111 587.81,186.111 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,94.3288 587.81,94.3288 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 596.063,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 132.231,369.674 132.231,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 250.194,369.674 250.194,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 368.158,369.674 368.158,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 486.121,369.674 486.121,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 45.8815,23.3815 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 54.1342,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,277.892 54.1342,277.892 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,186.111 54.1342,186.111 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,94.3288 54.1342,94.3288 \n",
" \"/>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 132.231, 381.674)\" x=\"132.231\" y=\"381.674\">2.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 250.194, 381.674)\" x=\"250.194\" y=\"381.674\">5.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 368.158, 381.674)\" x=\"368.158\" y=\"381.674\">7.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 486.121, 381.674)\" x=\"486.121\" y=\"381.674\">10.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 374.174)\" x=\"44.6815\" y=\"374.174\">0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 282.392)\" x=\"44.6815\" y=\"282.392\">100</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 190.611)\" x=\"44.6815\" y=\"190.611\">200</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 98.8288)\" x=\"44.6815\" y=\"98.8288\">300</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:21; text-anchor:middle;\" transform=\"rotate(0, 320.972, 18)\" x=\"320.972\" y=\"18\">Histogram of relative error values for SVD reconstruction</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:16; text-anchor:middle;\" transform=\"rotate(0, 320.972, 397.6)\" x=\"320.972\" y=\"397.6\">factor by which Tensorflow error is greater than Julia (LAPACK) error</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:16; text-anchor:middle;\" transform=\"rotate(-90, 14.4, 196.528)\" x=\"14.4\" y=\"196.528\">number of trials with this error</text>\n",
"</g>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"61.4526,317.358 61.4526,369.674 85.0453,369.674 85.0453,317.358 61.4526,317.358 61.4526,317.358 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 61.4526,317.358 61.4526,369.674 85.0453,369.674 85.0453,317.358 61.4526,317.358 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"85.0453,190.7 85.0453,369.674 108.638,369.674 108.638,190.7 85.0453,190.7 85.0453,190.7 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 85.0453,190.7 85.0453,369.674 108.638,369.674 108.638,190.7 85.0453,190.7 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"108.638,54.8626 108.638,369.674 132.231,369.674 132.231,54.8626 108.638,54.8626 108.638,54.8626 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 108.638,54.8626 108.638,369.674 132.231,369.674 132.231,54.8626 108.638,54.8626 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"132.231,137.466 132.231,369.674 155.823,369.674 155.823,137.466 132.231,137.466 132.231,137.466 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 132.231,137.466 132.231,369.674 155.823,369.674 155.823,137.466 132.231,137.466 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"155.823,262.289 155.823,369.674 179.416,369.674 179.416,262.289 155.823,262.289 155.823,262.289 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 155.823,262.289 155.823,369.674 179.416,369.674 179.416,262.289 155.823,262.289 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"179.416,343.057 179.416,369.674 203.009,369.674 203.009,343.057 179.416,343.057 179.416,343.057 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 179.416,343.057 179.416,369.674 203.009,369.674 203.009,343.057 179.416,343.057 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"203.009,365.085 203.009,369.674 226.601,369.674 226.601,365.085 203.009,365.085 203.009,365.085 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 203.009,365.085 203.009,369.674 226.601,369.674 226.601,365.085 203.009,365.085 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"226.601,369.674 226.601,369.674 250.194,369.674 250.194,369.674 226.601,369.674 226.601,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 226.601,369.674 226.601,369.674 250.194,369.674 226.601,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"250.194,369.674 250.194,369.674 273.787,369.674 273.787,369.674 250.194,369.674 250.194,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 250.194,369.674 250.194,369.674 273.787,369.674 250.194,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"273.787,369.674 273.787,369.674 297.38,369.674 297.38,369.674 273.787,369.674 273.787,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 273.787,369.674 273.787,369.674 297.38,369.674 273.787,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"297.38,369.674 297.38,369.674 320.972,369.674 320.972,369.674 297.38,369.674 297.38,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 297.38,369.674 297.38,369.674 320.972,369.674 297.38,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"320.972,369.674 320.972,369.674 344.565,369.674 344.565,369.674 320.972,369.674 320.972,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 320.972,369.674 320.972,369.674 344.565,369.674 320.972,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"344.565,369.674 344.565,369.674 368.158,369.674 368.158,369.674 344.565,369.674 344.565,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 344.565,369.674 344.565,369.674 368.158,369.674 344.565,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"368.158,369.674 368.158,369.674 391.75,369.674 391.75,369.674 368.158,369.674 368.158,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 368.158,369.674 368.158,369.674 391.75,369.674 368.158,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"391.75,369.674 391.75,369.674 415.343,369.674 415.343,369.674 391.75,369.674 391.75,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 391.75,369.674 391.75,369.674 415.343,369.674 391.75,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"415.343,369.674 415.343,369.674 438.936,369.674 438.936,369.674 415.343,369.674 415.343,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 415.343,369.674 415.343,369.674 438.936,369.674 415.343,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"438.936,369.674 438.936,369.674 462.528,369.674 462.528,369.674 438.936,369.674 438.936,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 438.936,369.674 438.936,369.674 462.528,369.674 438.936,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"462.528,369.674 462.528,369.674 486.121,369.674 486.121,369.674 462.528,369.674 462.528,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 462.528,369.674 462.528,369.674 486.121,369.674 462.528,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"486.121,369.674 486.121,369.674 509.714,369.674 509.714,369.674 486.121,369.674 486.121,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 486.121,369.674 486.121,369.674 509.714,369.674 486.121,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"509.714,369.674 509.714,369.674 533.306,369.674 533.306,369.674 509.714,369.674 509.714,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 509.714,369.674 509.714,369.674 533.306,369.674 509.714,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"533.306,369.674 533.306,369.674 556.899,369.674 556.899,369.674 533.306,369.674 533.306,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 533.306,369.674 533.306,369.674 556.899,369.674 533.306,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"556.899,368.756 556.899,369.674 580.492,369.674 580.492,368.756 556.899,368.756 556.899,368.756 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 556.899,368.756 556.899,369.674 580.492,369.674 580.492,368.756 556.899,368.756 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"505.547,74.5015 578.063,74.5015 578.063,44.2615 505.547,44.2615 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip00)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 505.547,74.5015 578.063,74.5015 578.063,44.2615 505.547,44.2615 505.547,74.5015 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"511.547,65.4295 547.547,65.4295 547.547,53.3335 511.547,53.3335 511.547,65.4295 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip00)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 511.547,65.4295 547.547,65.4295 547.547,53.3335 511.547,53.3335 511.547,65.4295 \n",
" \"/>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:start;\" transform=\"rotate(0, 553.547, 63.8815)\" x=\"553.547\" y=\"63.8815\">y1</text>\n",
"</g>\n",
"</svg>\n"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"normal100double = generate_data(1000, randn, Float64, (100,100))\n",
"display_evaluation_figures(normal100double)"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"err_jl:\tQ0=9.65e-09\t Q1=1.13e-08\t Q2=1.19e-08\t Q3=1.25e-08\t Q4=1.62e-08\n",
"err_tf:\tQ0=2.38e-08\t Q1=3.63e-08\t Q2=4.02e-08\t Q3=4.49e-08\t Q4=7.15e-08\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1m\u001b[34mINFO: binning = auto\n",
"\u001b[0m"
]
},
{
"data": {
"text/html": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 600 400\">\n",
"<defs>\n",
" <clipPath id=\"clip00\">\n",
" <rect x=\"0\" y=\"0\" width=\"600\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"0,400 600,400 600,0 0,0 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip01\">\n",
" <rect x=\"120\" y=\"0\" width=\"421\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"45.8815,369.674 596.063,369.674 596.063,23.3815 45.8815,23.3815 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip02\">\n",
" <rect x=\"45\" y=\"23\" width=\"551\" height=\"347\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 106.586,364.48 106.586,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 332.256,364.48 332.256,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 557.925,364.48 557.925,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,369.674 587.81,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,258.825 587.81,258.825 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,147.976 587.81,147.976 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,37.1267 587.81,37.1267 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 596.063,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 106.586,369.674 106.586,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 332.256,369.674 332.256,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 557.925,369.674 557.925,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 45.8815,23.3815 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 54.1342,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,258.825 54.1342,258.825 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,147.976 54.1342,147.976 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,37.1267 54.1342,37.1267 \n",
" \"/>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 106.586, 381.674)\" x=\"106.586\" y=\"381.674\">2</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 332.256, 381.674)\" x=\"332.256\" y=\"381.674\">4</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 557.925, 381.674)\" x=\"557.925\" y=\"381.674\">6</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 374.174)\" x=\"44.6815\" y=\"374.174\">0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 263.325)\" x=\"44.6815\" y=\"263.325\">50</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 152.476)\" x=\"44.6815\" y=\"152.476\">100</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 41.6267)\" x=\"44.6815\" y=\"41.6267\">150</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:21; text-anchor:middle;\" transform=\"rotate(0, 320.972, 18)\" x=\"320.972\" y=\"18\">Histogram of relative error values for SVD reconstruction</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:16; text-anchor:middle;\" transform=\"rotate(0, 320.972, 397.6)\" x=\"320.972\" y=\"397.6\">factor by which Tensorflow error is greater than Julia (LAPACK) error</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:16; text-anchor:middle;\" transform=\"rotate(-90, 14.4, 196.528)\" x=\"14.4\" y=\"196.528\">number of trials with this error</text>\n",
"</g>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"61.4526,367.457 61.4526,369.674 84.0195,369.674 84.0195,367.457 61.4526,367.457 61.4526,367.457 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 61.4526,367.457 61.4526,369.674 84.0195,369.674 84.0195,367.457 61.4526,367.457 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"84.0195,363.023 84.0195,369.674 106.586,369.674 106.586,363.023 84.0195,363.023 84.0195,363.023 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 84.0195,363.023 84.0195,369.674 106.586,369.674 106.586,363.023 84.0195,363.023 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"106.586,356.372 106.586,369.674 129.153,369.674 129.153,356.372 106.586,356.372 106.586,356.372 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 106.586,356.372 106.586,369.674 129.153,369.674 129.153,356.372 106.586,356.372 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"129.153,334.202 129.153,369.674 151.72,369.674 151.72,334.202 129.153,334.202 129.153,334.202 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 129.153,334.202 129.153,369.674 151.72,369.674 151.72,334.202 129.153,334.202 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"151.72,263.259 151.72,369.674 174.287,369.674 174.287,263.259 151.72,263.259 151.72,263.259 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 151.72,263.259 151.72,369.674 174.287,369.674 174.287,263.259 151.72,263.259 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"174.287,207.834 174.287,369.674 196.854,369.674 196.854,207.834 174.287,207.834 174.287,207.834 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 174.287,207.834 174.287,369.674 196.854,369.674 196.854,207.834 174.287,207.834 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"196.854,130.24 196.854,369.674 219.421,369.674 219.421,130.24 196.854,130.24 196.854,130.24 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 196.854,130.24 196.854,369.674 219.421,369.674 219.421,130.24 196.854,130.24 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"219.421,54.8626 219.421,369.674 241.988,369.674 241.988,54.8626 219.421,54.8626 219.421,54.8626 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 219.421,54.8626 219.421,369.674 241.988,369.674 241.988,54.8626 219.421,54.8626 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"241.988,99.2023 241.988,369.674 264.555,369.674 264.555,99.2023 241.988,99.2023 241.988,99.2023 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 241.988,99.2023 241.988,369.674 264.555,369.674 264.555,99.2023 241.988,99.2023 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"264.555,92.5513 264.555,369.674 287.122,369.674 287.122,92.5513 264.555,92.5513 264.555,92.5513 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 264.555,92.5513 264.555,369.674 287.122,369.674 287.122,92.5513 264.555,92.5513 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"287.122,128.023 287.122,369.674 309.689,369.674 309.689,128.023 287.122,128.023 287.122,128.023 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 287.122,128.023 287.122,369.674 309.689,369.674 309.689,128.023 287.122,128.023 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"309.689,190.099 309.689,369.674 332.256,369.674 332.256,190.099 309.689,190.099 309.689,190.099 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 309.689,190.099 309.689,369.674 332.256,369.674 332.256,190.099 309.689,190.099 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"332.256,241.089 332.256,369.674 354.823,369.674 354.823,241.089 332.256,241.089 332.256,241.089 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 332.256,241.089 332.256,369.674 354.823,369.674 354.823,241.089 332.256,241.089 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"354.823,274.344 354.823,369.674 377.39,369.674 377.39,274.344 354.823,274.344 354.823,274.344 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 354.823,274.344 354.823,369.674 377.39,369.674 377.39,274.344 354.823,274.344 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"377.39,318.684 377.39,369.674 399.956,369.674 399.956,318.684 377.39,318.684 377.39,318.684 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 377.39,318.684 377.39,369.674 399.956,369.674 399.956,318.684 377.39,318.684 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"399.956,327.551 399.956,369.674 422.523,369.674 422.523,327.551 399.956,327.551 399.956,327.551 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 399.956,327.551 399.956,369.674 422.523,369.674 422.523,327.551 399.956,327.551 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"422.523,343.07 422.523,369.674 445.09,369.674 445.09,343.07 422.523,343.07 422.523,343.07 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 422.523,343.07 422.523,369.674 445.09,369.674 445.09,343.07 422.523,343.07 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"445.09,351.938 445.09,369.674 467.657,369.674 467.657,351.938 445.09,351.938 445.09,351.938 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 445.09,351.938 445.09,369.674 467.657,369.674 467.657,351.938 445.09,351.938 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"467.657,367.457 467.657,369.674 490.224,369.674 490.224,367.457 467.657,367.457 467.657,367.457 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 467.657,367.457 467.657,369.674 490.224,369.674 490.224,367.457 467.657,367.457 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"490.224,369.674 490.224,369.674 512.791,369.674 512.791,369.674 490.224,369.674 490.224,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 490.224,369.674 490.224,369.674 512.791,369.674 490.224,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"512.791,367.457 512.791,369.674 535.358,369.674 535.358,367.457 512.791,367.457 512.791,367.457 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 512.791,367.457 512.791,369.674 535.358,369.674 535.358,367.457 512.791,367.457 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"535.358,369.674 535.358,369.674 557.925,369.674 557.925,369.674 535.358,369.674 535.358,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 535.358,369.674 535.358,369.674 557.925,369.674 535.358,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"557.925,367.457 557.925,369.674 580.492,369.674 580.492,367.457 557.925,367.457 557.925,367.457 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 557.925,367.457 557.925,369.674 580.492,369.674 580.492,367.457 557.925,367.457 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"505.547,74.5015 578.063,74.5015 578.063,44.2615 505.547,44.2615 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip00)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 505.547,74.5015 578.063,74.5015 578.063,44.2615 505.547,44.2615 505.547,74.5015 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"511.547,65.4295 547.547,65.4295 547.547,53.3335 511.547,53.3335 511.547,65.4295 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip00)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 511.547,65.4295 547.547,65.4295 547.547,53.3335 511.547,53.3335 511.547,65.4295 \n",
" \"/>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:start;\" transform=\"rotate(0, 553.547, 63.8815)\" x=\"553.547\" y=\"63.8815\">y1</text>\n",
"</g>\n",
"</svg>\n"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"normal100float = generate_data(1000, randn, Float32, (100,100))\n",
"display_evaluation_figures(normal100float)"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"err_jl:\tQ0=4.57e-27\t Q1=6.39e-27\t Q2=7.46e-27\t Q3=8.99e-27\t Q4=2.23e-26\n",
"err_tf:\tQ0=1.27e-26\t Q1=3.95e-26\t Q2=6.08e-26\t Q3=8.84e-26\t Q4=2.10e-25\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1m\u001b[34mINFO: binning = auto\n",
"\u001b[0m"
]
},
{
"data": {
"text/html": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 600 400\">\n",
"<defs>\n",
" <clipPath id=\"clip00\">\n",
" <rect x=\"0\" y=\"0\" width=\"600\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"0,400 600,400 600,0 0,0 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip01\">\n",
" <rect x=\"120\" y=\"0\" width=\"421\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"45.8815,369.674 596.063,369.674 596.063,23.3815 45.8815,23.3815 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip02\">\n",
" <rect x=\"45\" y=\"23\" width=\"551\" height=\"347\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 222.534,364.48 222.534,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 401.513,364.48 401.513,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 580.492,364.48 580.492,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,369.674 587.81,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,302.693 587.81,302.693 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,235.712 587.81,235.712 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,168.731 587.81,168.731 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,101.749 587.81,101.749 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,34.7683 587.81,34.7683 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 596.063,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 222.534,369.674 222.534,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 401.513,369.674 401.513,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 580.492,369.674 580.492,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 45.8815,23.3815 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 54.1342,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,302.693 54.1342,302.693 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,235.712 54.1342,235.712 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,168.731 54.1342,168.731 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,101.749 54.1342,101.749 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,34.7683 54.1342,34.7683 \n",
" \"/>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 222.534, 381.674)\" x=\"222.534\" y=\"381.674\">10</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 401.513, 381.674)\" x=\"401.513\" y=\"381.674\">20</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 580.492, 381.674)\" x=\"580.492\" y=\"381.674\">30</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 374.174)\" x=\"44.6815\" y=\"374.174\">0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 307.193)\" x=\"44.6815\" y=\"307.193\">20</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 240.212)\" x=\"44.6815\" y=\"240.212\">40</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 173.231)\" x=\"44.6815\" y=\"173.231\">60</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 106.249)\" x=\"44.6815\" y=\"106.249\">80</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 39.2683)\" x=\"44.6815\" y=\"39.2683\">100</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:21; text-anchor:middle;\" transform=\"rotate(0, 320.972, 18)\" x=\"320.972\" y=\"18\">Histogram of relative error values for SVD reconstruction</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:16; text-anchor:middle;\" transform=\"rotate(0, 320.972, 397.6)\" x=\"320.972\" y=\"397.6\">factor by which Tensorflow error is greater than Julia (LAPACK) error</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:16; text-anchor:middle;\" transform=\"rotate(-90, 14.4, 196.528)\" x=\"14.4\" y=\"196.528\">number of trials with this error</text>\n",
"</g>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"61.4526,299.344 61.4526,369.674 79.3505,369.674 79.3505,299.344 61.4526,299.344 61.4526,299.344 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 61.4526,299.344 61.4526,369.674 79.3505,369.674 79.3505,299.344 61.4526,299.344 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"79.3505,182.127 79.3505,369.674 97.2484,369.674 97.2484,182.127 79.3505,182.127 79.3505,182.127 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 79.3505,182.127 79.3505,369.674 97.2484,369.674 97.2484,182.127 79.3505,182.127 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"97.2484,118.495 97.2484,369.674 115.146,369.674 115.146,118.495 97.2484,118.495 97.2484,118.495 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 97.2484,118.495 97.2484,369.674 115.146,369.674 115.146,118.495 97.2484,118.495 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"115.146,71.6079 115.146,369.674 133.044,369.674 133.044,71.6079 115.146,71.6079 115.146,71.6079 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 115.146,71.6079 115.146,369.674 133.044,369.674 133.044,71.6079 115.146,71.6079 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"133.044,54.8626 133.044,369.674 150.942,369.674 150.942,54.8626 133.044,54.8626 133.044,54.8626 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 133.044,54.8626 133.044,369.674 150.942,369.674 150.942,54.8626 133.044,54.8626 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"150.942,71.6079 150.942,369.674 168.84,369.674 168.84,71.6079 150.942,71.6079 150.942,71.6079 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 150.942,71.6079 150.942,369.674 168.84,369.674 168.84,71.6079 150.942,71.6079 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"168.84,121.844 168.84,369.674 186.738,369.674 186.738,121.844 168.84,121.844 168.84,121.844 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 168.84,121.844 168.84,369.674 186.738,369.674 186.738,121.844 168.84,121.844 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"186.738,85.0041 186.738,369.674 204.636,369.674 204.636,85.0041 186.738,85.0041 186.738,85.0041 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 186.738,85.0041 186.738,369.674 204.636,369.674 204.636,85.0041 186.738,85.0041 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"204.636,185.476 204.636,369.674 222.534,369.674 222.534,185.476 204.636,185.476 204.636,185.476 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 204.636,185.476 204.636,369.674 222.534,369.674 222.534,185.476 204.636,185.476 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"222.534,151.985 222.534,369.674 240.432,369.674 240.432,151.985 222.534,151.985 222.534,151.985 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 222.534,151.985 222.534,369.674 240.432,369.674 240.432,151.985 222.534,151.985 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"240.432,188.825 240.432,369.674 258.33,369.674 258.33,188.825 240.432,188.825 240.432,188.825 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 240.432,188.825 240.432,369.674 258.33,369.674 258.33,188.825 240.432,188.825 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"258.33,205.57 258.33,369.674 276.227,369.674 276.227,205.57 258.33,205.57 258.33,205.57 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 258.33,205.57 258.33,369.674 276.227,369.674 276.227,205.57 258.33,205.57 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"276.227,249.108 276.227,369.674 294.125,369.674 294.125,249.108 276.227,249.108 276.227,249.108 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 276.227,249.108 276.227,369.674 294.125,369.674 294.125,249.108 276.227,249.108 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"294.125,282.599 294.125,369.674 312.023,369.674 312.023,282.599 294.125,282.599 294.125,282.599 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 294.125,282.599 294.125,369.674 312.023,369.674 312.023,282.599 294.125,282.599 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"312.023,306.042 312.023,369.674 329.921,369.674 329.921,306.042 312.023,306.042 312.023,306.042 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 312.023,306.042 312.023,369.674 329.921,369.674 329.921,306.042 312.023,306.042 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"329.921,322.787 329.921,369.674 347.819,369.674 347.819,322.787 329.921,322.787 329.921,322.787 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 329.921,322.787 329.921,369.674 347.819,369.674 347.819,322.787 329.921,322.787 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"347.819,292.646 347.819,369.674 365.717,369.674 365.717,292.646 347.819,292.646 347.819,292.646 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 347.819,292.646 347.819,369.674 365.717,369.674 365.717,292.646 347.819,292.646 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"365.717,319.438 365.717,369.674 383.615,369.674 383.615,319.438 365.717,319.438 365.717,319.438 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 365.717,319.438 365.717,369.674 383.615,369.674 383.615,319.438 365.717,319.438 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"383.615,319.438 383.615,369.674 401.513,369.674 401.513,319.438 383.615,319.438 383.615,319.438 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 383.615,319.438 383.615,369.674 401.513,369.674 401.513,319.438 383.615,319.438 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"401.513,342.882 401.513,369.674 419.411,369.674 419.411,342.882 401.513,342.882 401.513,342.882 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 401.513,342.882 401.513,369.674 419.411,369.674 419.411,342.882 401.513,342.882 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"419.411,329.485 419.411,369.674 437.309,369.674 437.309,329.485 419.411,329.485 419.411,329.485 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 419.411,329.485 419.411,369.674 437.309,369.674 437.309,329.485 419.411,329.485 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"437.309,352.929 437.309,369.674 455.206,369.674 455.206,352.929 437.309,352.929 437.309,352.929 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 437.309,352.929 437.309,369.674 455.206,369.674 455.206,352.929 437.309,352.929 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"455.206,352.929 455.206,369.674 473.104,369.674 473.104,352.929 455.206,352.929 455.206,352.929 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 455.206,352.929 455.206,369.674 473.104,369.674 473.104,352.929 455.206,352.929 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"473.104,349.58 473.104,369.674 491.002,369.674 491.002,349.58 473.104,349.58 473.104,349.58 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 473.104,349.58 473.104,369.674 491.002,369.674 491.002,349.58 473.104,349.58 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"491.002,359.627 491.002,369.674 508.9,369.674 508.9,359.627 491.002,359.627 491.002,359.627 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 491.002,359.627 491.002,369.674 508.9,369.674 508.9,359.627 491.002,359.627 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"508.9,356.278 508.9,369.674 526.798,369.674 526.798,356.278 508.9,356.278 508.9,356.278 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 508.9,356.278 508.9,369.674 526.798,369.674 526.798,356.278 508.9,356.278 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"526.798,369.674 526.798,369.674 544.696,369.674 544.696,369.674 526.798,369.674 526.798,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 526.798,369.674 526.798,369.674 544.696,369.674 526.798,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"544.696,362.976 544.696,369.674 562.594,369.674 562.594,362.976 544.696,362.976 544.696,362.976 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 544.696,362.976 544.696,369.674 562.594,369.674 562.594,362.976 544.696,362.976 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"562.594,366.325 562.594,369.674 580.492,369.674 580.492,366.325 562.594,366.325 562.594,366.325 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 562.594,366.325 562.594,369.674 580.492,369.674 580.492,366.325 562.594,366.325 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"505.547,74.5015 578.063,74.5015 578.063,44.2615 505.547,44.2615 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip00)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 505.547,74.5015 578.063,74.5015 578.063,44.2615 505.547,44.2615 505.547,74.5015 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"511.547,65.4295 547.547,65.4295 547.547,53.3335 511.547,53.3335 511.547,65.4295 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip00)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 511.547,65.4295 547.547,65.4295 547.547,53.3335 511.547,53.3335 511.547,65.4295 \n",
" \"/>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:start;\" transform=\"rotate(0, 553.547, 63.8815)\" x=\"553.547\" y=\"63.8815\">y1</text>\n",
"</g>\n",
"</svg>\n"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"uniform100double = generate_data(1000, rand, Float64, (100,100))\n",
"display_evaluation_figures(uniform100double)"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"err_jl:\tQ0=1.07e-09\t Q1=1.31e-09\t Q2=1.47e-09\t Q3=1.69e-09\t Q4=2.95e-09\n",
"err_tf:\tQ0=2.98e-09\t Q1=4.29e-09\t Q2=4.66e-09\t Q3=5.18e-09\t Q4=7.58e-09\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1m\u001b[34mINFO: binning = auto\n",
"\u001b[0m"
]
},
{
"data": {
"text/html": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 600 400\">\n",
"<defs>\n",
" <clipPath id=\"clip00\">\n",
" <rect x=\"0\" y=\"0\" width=\"600\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"0,400 600,400 600,0 0,0 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip01\">\n",
" <rect x=\"120\" y=\"0\" width=\"421\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"45.8815,369.674 596.063,369.674 596.063,23.3815 45.8815,23.3815 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip02\">\n",
" <rect x=\"45\" y=\"23\" width=\"551\" height=\"347\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 126.333,364.48 126.333,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 342.599,364.48 342.599,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 558.865,364.48 558.865,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,369.674 587.81,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,231.599 587.81,231.599 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,93.5237 587.81,93.5237 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 596.063,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 126.333,369.674 126.333,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 342.599,369.674 342.599,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 558.865,369.674 558.865,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 45.8815,23.3815 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 54.1342,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,231.599 54.1342,231.599 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,93.5237 54.1342,93.5237 \n",
" \"/>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 126.333, 381.674)\" x=\"126.333\" y=\"381.674\">2</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 342.599, 381.674)\" x=\"342.599\" y=\"381.674\">4</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 558.865, 381.674)\" x=\"558.865\" y=\"381.674\">6</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 374.174)\" x=\"44.6815\" y=\"374.174\">0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 236.099)\" x=\"44.6815\" y=\"236.099\">50</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 98.0237)\" x=\"44.6815\" y=\"98.0237\">100</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:21; text-anchor:middle;\" transform=\"rotate(0, 320.972, 18)\" x=\"320.972\" y=\"18\">Histogram of relative error values for SVD reconstruction</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:16; text-anchor:middle;\" transform=\"rotate(0, 320.972, 397.6)\" x=\"320.972\" y=\"397.6\">factor by which Tensorflow error is greater than Julia (LAPACK) error</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:16; text-anchor:middle;\" transform=\"rotate(-90, 14.4, 196.528)\" x=\"14.4\" y=\"196.528\">number of trials with this error</text>\n",
"</g>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"61.4526,358.628 61.4526,369.674 83.0793,369.674 83.0793,358.628 61.4526,358.628 61.4526,358.628 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 61.4526,358.628 61.4526,369.674 83.0793,369.674 83.0793,358.628 61.4526,358.628 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"83.0793,336.536 83.0793,369.674 104.706,369.674 104.706,336.536 83.0793,336.536 83.0793,336.536 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 83.0793,336.536 83.0793,369.674 104.706,369.674 104.706,336.536 83.0793,336.536 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"104.706,319.967 104.706,369.674 126.333,369.674 126.333,319.967 104.706,319.967 104.706,319.967 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 104.706,319.967 104.706,369.674 126.333,369.674 126.333,319.967 104.706,319.967 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"126.333,253.691 126.333,369.674 147.959,369.674 147.959,253.691 126.333,253.691 126.333,253.691 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 126.333,253.691 126.333,369.674 147.959,369.674 147.959,253.691 126.333,253.691 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"147.959,226.076 147.959,369.674 169.586,369.674 169.586,226.076 147.959,226.076 147.959,226.076 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 147.959,226.076 147.959,369.674 169.586,369.674 169.586,226.076 147.959,226.076 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"169.586,157.038 169.586,369.674 191.212,369.674 191.212,157.038 169.586,157.038 169.586,157.038 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 169.586,157.038 169.586,369.674 191.212,369.674 191.212,157.038 169.586,157.038 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"191.212,93.5237 191.212,369.674 212.839,369.674 212.839,93.5237 191.212,93.5237 191.212,93.5237 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 191.212,93.5237 191.212,369.674 212.839,369.674 212.839,93.5237 191.212,93.5237 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"212.839,99.0467 212.839,369.674 234.466,369.674 234.466,99.0467 212.839,99.0467 212.839,99.0467 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 212.839,99.0467 212.839,369.674 234.466,369.674 234.466,99.0467 212.839,99.0467 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"234.466,88.0007 234.466,369.674 256.092,369.674 256.092,88.0007 234.466,88.0007 234.466,88.0007 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 234.466,88.0007 234.466,369.674 256.092,369.674 256.092,88.0007 234.466,88.0007 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"256.092,54.8626 256.092,369.674 277.719,369.674 277.719,54.8626 256.092,54.8626 256.092,54.8626 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 256.092,54.8626 256.092,369.674 277.719,369.674 277.719,54.8626 256.092,54.8626 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"277.719,88.0007 277.719,369.674 299.346,369.674 299.346,88.0007 277.719,88.0007 277.719,88.0007 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 277.719,88.0007 277.719,369.674 299.346,369.674 299.346,88.0007 277.719,88.0007 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"299.346,148.754 299.346,369.674 320.972,369.674 320.972,148.754 299.346,148.754 299.346,148.754 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 299.346,148.754 299.346,369.674 320.972,369.674 320.972,148.754 299.346,148.754 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"320.972,198.461 320.972,369.674 342.599,369.674 342.599,198.461 320.972,198.461 320.972,198.461 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 320.972,198.461 320.972,369.674 342.599,369.674 342.599,198.461 320.972,198.461 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"342.599,259.214 342.599,369.674 364.225,369.674 364.225,259.214 342.599,259.214 342.599,259.214 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 342.599,259.214 342.599,369.674 364.225,369.674 364.225,259.214 342.599,259.214 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"364.225,278.544 364.225,369.674 385.852,369.674 385.852,278.544 364.225,278.544 364.225,278.544 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 364.225,278.544 364.225,369.674 385.852,369.674 385.852,278.544 364.225,278.544 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"385.852,295.113 385.852,369.674 407.479,369.674 407.479,295.113 385.852,295.113 385.852,295.113 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 385.852,295.113 385.852,369.674 407.479,369.674 407.479,295.113 385.852,295.113 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"407.479,331.013 407.479,369.674 429.105,369.674 429.105,331.013 407.479,331.013 407.479,331.013 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 407.479,331.013 407.479,369.674 429.105,369.674 429.105,331.013 407.479,331.013 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"429.105,336.536 429.105,369.674 450.732,369.674 450.732,336.536 429.105,336.536 429.105,336.536 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 429.105,336.536 429.105,369.674 450.732,369.674 450.732,336.536 429.105,336.536 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"450.732,361.39 450.732,369.674 472.359,369.674 472.359,361.39 450.732,361.39 450.732,361.39 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 450.732,361.39 450.732,369.674 472.359,369.674 472.359,361.39 450.732,361.39 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"472.359,364.151 472.359,369.674 493.985,369.674 493.985,364.151 472.359,364.151 472.359,364.151 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 472.359,364.151 472.359,369.674 493.985,369.674 493.985,364.151 472.359,364.151 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"493.985,364.151 493.985,369.674 515.612,369.674 515.612,364.151 493.985,364.151 493.985,364.151 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 493.985,364.151 493.985,369.674 515.612,369.674 515.612,364.151 493.985,364.151 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"515.612,366.913 515.612,369.674 537.239,369.674 537.239,366.913 515.612,366.913 515.612,366.913 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 515.612,366.913 515.612,369.674 537.239,369.674 537.239,366.913 515.612,366.913 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"537.239,369.674 537.239,369.674 558.865,369.674 558.865,369.674 537.239,369.674 537.239,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 537.239,369.674 537.239,369.674 558.865,369.674 537.239,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"558.865,361.39 558.865,369.674 580.492,369.674 580.492,361.39 558.865,361.39 558.865,361.39 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 558.865,361.39 558.865,369.674 580.492,369.674 580.492,361.39 558.865,361.39 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"505.547,74.5015 578.063,74.5015 578.063,44.2615 505.547,44.2615 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip00)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 505.547,74.5015 578.063,74.5015 578.063,44.2615 505.547,44.2615 505.547,74.5015 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"511.547,65.4295 547.547,65.4295 547.547,53.3335 511.547,53.3335 511.547,65.4295 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip00)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 511.547,65.4295 547.547,65.4295 547.547,53.3335 511.547,53.3335 511.547,65.4295 \n",
" \"/>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:start;\" transform=\"rotate(0, 553.547, 63.8815)\" x=\"553.547\" y=\"63.8815\">y1</text>\n",
"</g>\n",
"</svg>\n"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"uniform100float = generate_data(1000, rand, Float32, (100,100))\n",
"display_evaluation_figures(uniform100float)"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"err_jl:\tQ0=3.69e-29\t Q1=9.58e-29\t Q2=1.38e-28\t Q3=2.24e-28\t Q4=3.18e-27\n",
"err_tf:\tQ0=1.42e-28\t Q1=4.83e-28\t Q2=7.33e-28\t Q3=1.10e-27\t Q4=5.29e-27\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1m\u001b[34mINFO: binning = auto\n",
"\u001b[0m"
]
},
{
"data": {
"text/html": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 600 400\">\n",
"<defs>\n",
" <clipPath id=\"clip00\">\n",
" <rect x=\"0\" y=\"0\" width=\"600\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"0,400 600,400 600,0 0,0 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip01\">\n",
" <rect x=\"120\" y=\"0\" width=\"421\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"45.8815,369.674 596.063,369.674 596.063,23.3815 45.8815,23.3815 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip02\">\n",
" <rect x=\"45\" y=\"23\" width=\"551\" height=\"347\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 61.4526,364.48 61.4526,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 179.416,364.48 179.416,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 297.38,364.48 297.38,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 415.343,364.48 415.343,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 533.306,364.48 533.306,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,369.674 587.81,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,300.332 587.81,300.332 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,230.991 587.81,230.991 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,161.649 587.81,161.649 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,92.3071 587.81,92.3071 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 596.063,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 61.4526,369.674 61.4526,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 179.416,369.674 179.416,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 297.38,369.674 297.38,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 415.343,369.674 415.343,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 533.306,369.674 533.306,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 45.8815,23.3815 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 54.1342,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,300.332 54.1342,300.332 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,230.991 54.1342,230.991 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,161.649 54.1342,161.649 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,92.3071 54.1342,92.3071 \n",
" \"/>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 61.4526, 381.674)\" x=\"61.4526\" y=\"381.674\">0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 179.416, 381.674)\" x=\"179.416\" y=\"381.674\">10</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 297.38, 381.674)\" x=\"297.38\" y=\"381.674\">20</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 415.343, 381.674)\" x=\"415.343\" y=\"381.674\">30</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 533.306, 381.674)\" x=\"533.306\" y=\"381.674\">40</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 374.174)\" x=\"44.6815\" y=\"374.174\">0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 304.832)\" x=\"44.6815\" y=\"304.832\">50</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 235.491)\" x=\"44.6815\" y=\"235.491\">100</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 166.149)\" x=\"44.6815\" y=\"166.149\">150</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 96.8071)\" x=\"44.6815\" y=\"96.8071\">200</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:21; text-anchor:middle;\" transform=\"rotate(0, 320.972, 18)\" x=\"320.972\" y=\"18\">Histogram of relative error values for SVD reconstruction</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:16; text-anchor:middle;\" transform=\"rotate(0, 320.972, 397.6)\" x=\"320.972\" y=\"397.6\">factor by which Tensorflow error is greater than Julia (LAPACK) error</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:16; text-anchor:middle;\" transform=\"rotate(-90, 14.4, 196.528)\" x=\"14.4\" y=\"196.528\">number of trials with this error</text>\n",
"</g>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"61.4526,135.299 61.4526,369.674 85.0453,369.674 85.0453,135.299 61.4526,135.299 61.4526,135.299 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 61.4526,135.299 61.4526,369.674 85.0453,369.674 85.0453,135.299 61.4526,135.299 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"85.0453,54.8626 85.0453,369.674 108.638,369.674 108.638,54.8626 85.0453,54.8626 85.0453,54.8626 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 85.0453,54.8626 85.0453,369.674 108.638,369.674 108.638,54.8626 85.0453,54.8626 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"108.638,108.949 108.638,369.674 132.231,369.674 132.231,108.949 108.638,108.949 108.638,108.949 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 108.638,108.949 108.638,369.674 132.231,369.674 132.231,108.949 108.638,108.949 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"132.231,182.451 132.231,369.674 155.823,369.674 155.823,182.451 132.231,182.451 132.231,182.451 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 132.231,182.451 132.231,369.674 155.823,369.674 155.823,182.451 132.231,182.451 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"155.823,258.727 155.823,369.674 179.416,369.674 179.416,258.727 155.823,258.727 155.823,258.727 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 155.823,258.727 155.823,369.674 179.416,369.674 179.416,258.727 155.823,258.727 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"179.416,273.983 179.416,369.674 203.009,369.674 203.009,273.983 179.416,273.983 179.416,273.983 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 179.416,273.983 179.416,369.674 203.009,369.674 203.009,273.983 179.416,273.983 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"203.009,311.427 203.009,369.674 226.601,369.674 226.601,311.427 203.009,311.427 203.009,311.427 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 203.009,311.427 203.009,369.674 226.601,369.674 226.601,311.427 203.009,311.427 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"226.601,335.003 226.601,369.674 250.194,369.674 250.194,335.003 226.601,335.003 226.601,335.003 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 226.601,335.003 226.601,369.674 250.194,369.674 250.194,335.003 226.601,335.003 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"250.194,350.258 250.194,369.674 273.787,369.674 273.787,350.258 250.194,350.258 250.194,350.258 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 250.194,350.258 250.194,369.674 273.787,369.674 273.787,350.258 250.194,350.258 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"273.787,351.645 273.787,369.674 297.38,369.674 297.38,351.645 273.787,351.645 273.787,351.645 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 273.787,351.645 273.787,369.674 297.38,369.674 297.38,351.645 273.787,351.645 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"297.38,354.419 297.38,369.674 320.972,369.674 320.972,354.419 297.38,354.419 297.38,354.419 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 297.38,354.419 297.38,369.674 320.972,369.674 320.972,354.419 297.38,354.419 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"320.972,359.966 320.972,369.674 344.565,369.674 344.565,359.966 320.972,359.966 320.972,359.966 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 320.972,359.966 320.972,369.674 344.565,369.674 344.565,359.966 320.972,359.966 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"344.565,358.579 344.565,369.674 368.158,369.674 368.158,358.579 344.565,358.579 344.565,358.579 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 344.565,358.579 344.565,369.674 368.158,369.674 368.158,358.579 344.565,358.579 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"368.158,365.514 368.158,369.674 391.75,369.674 391.75,365.514 368.158,365.514 368.158,365.514 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 368.158,365.514 368.158,369.674 391.75,369.674 391.75,365.514 368.158,365.514 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"391.75,366.9 391.75,369.674 415.343,369.674 415.343,366.9 391.75,366.9 391.75,366.9 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 391.75,366.9 391.75,369.674 415.343,369.674 415.343,366.9 391.75,366.9 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"415.343,369.674 415.343,369.674 438.936,369.674 438.936,369.674 415.343,369.674 415.343,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 415.343,369.674 415.343,369.674 438.936,369.674 415.343,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"438.936,365.514 438.936,369.674 462.528,369.674 462.528,365.514 438.936,365.514 438.936,365.514 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 438.936,365.514 438.936,369.674 462.528,369.674 462.528,365.514 438.936,365.514 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"462.528,368.287 462.528,369.674 486.121,369.674 486.121,368.287 462.528,368.287 462.528,368.287 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 462.528,368.287 462.528,369.674 486.121,369.674 486.121,368.287 462.528,368.287 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"486.121,368.287 486.121,369.674 509.714,369.674 509.714,368.287 486.121,368.287 486.121,368.287 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 486.121,368.287 486.121,369.674 509.714,369.674 509.714,368.287 486.121,368.287 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"509.714,368.287 509.714,369.674 533.306,369.674 533.306,368.287 509.714,368.287 509.714,368.287 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 509.714,368.287 509.714,369.674 533.306,369.674 533.306,368.287 509.714,368.287 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"533.306,369.674 533.306,369.674 556.899,369.674 556.899,369.674 533.306,369.674 533.306,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 533.306,369.674 533.306,369.674 556.899,369.674 533.306,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"556.899,368.287 556.899,369.674 580.492,369.674 580.492,368.287 556.899,368.287 556.899,368.287 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 556.899,368.287 556.899,369.674 580.492,369.674 580.492,368.287 556.899,368.287 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"505.547,74.5015 578.063,74.5015 578.063,44.2615 505.547,44.2615 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip00)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 505.547,74.5015 578.063,74.5015 578.063,44.2615 505.547,44.2615 505.547,74.5015 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"511.547,65.4295 547.547,65.4295 547.547,53.3335 511.547,53.3335 511.547,65.4295 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip00)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 511.547,65.4295 547.547,65.4295 547.547,53.3335 511.547,53.3335 511.547,65.4295 \n",
" \"/>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:start;\" transform=\"rotate(0, 553.547, 63.8815)\" x=\"553.547\" y=\"63.8815\">y1</text>\n",
"</g>\n",
"</svg>\n"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"normal10double = generate_data(1000, randn, Float64, (10,10))\n",
"display_evaluation_figures(normal10double)"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"err_jl:\tQ0=8.95e-12\t Q1=2.14e-11\t Q2=2.80e-11\t Q3=3.74e-11\t Q4=1.11e-10\n",
"err_tf:\tQ0=3.56e-11\t Q1=1.52e-10\t Q2=2.36e-10\t Q3=3.52e-10\t Q4=1.19e-09\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1m\u001b[34mINFO: binning = auto\n",
"\u001b[0m"
]
},
{
"data": {
"text/html": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 600 400\">\n",
"<defs>\n",
" <clipPath id=\"clip00\">\n",
" <rect x=\"0\" y=\"0\" width=\"600\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"0,400 600,400 600,0 0,0 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip01\">\n",
" <rect x=\"120\" y=\"0\" width=\"421\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"45.8815,369.674 596.063,369.674 596.063,23.3815 45.8815,23.3815 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip02\">\n",
" <rect x=\"45\" y=\"23\" width=\"551\" height=\"347\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 61.4526,364.48 61.4526,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 264.202,364.48 264.202,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 466.952,364.48 466.952,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,369.674 587.81,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,271.296 587.81,271.296 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,172.917 587.81,172.917 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,74.5383 587.81,74.5383 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 596.063,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 61.4526,369.674 61.4526,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 264.202,369.674 264.202,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 466.952,369.674 466.952,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 45.8815,23.3815 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 54.1342,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,271.296 54.1342,271.296 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,172.917 54.1342,172.917 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,74.5383 54.1342,74.5383 \n",
" \"/>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 61.4526, 381.674)\" x=\"61.4526\" y=\"381.674\">0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 264.202, 381.674)\" x=\"264.202\" y=\"381.674\">25</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 466.952, 381.674)\" x=\"466.952\" y=\"381.674\">50</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 374.174)\" x=\"44.6815\" y=\"374.174\">0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 275.796)\" x=\"44.6815\" y=\"275.796\">50</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 177.417)\" x=\"44.6815\" y=\"177.417\">100</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 79.0383)\" x=\"44.6815\" y=\"79.0383\">150</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:21; text-anchor:middle;\" transform=\"rotate(0, 320.972, 18)\" x=\"320.972\" y=\"18\">Histogram of relative error values for SVD reconstruction</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:16; text-anchor:middle;\" transform=\"rotate(0, 320.972, 397.6)\" x=\"320.972\" y=\"397.6\">factor by which Tensorflow error is greater than Julia (LAPACK) error</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:16; text-anchor:middle;\" transform=\"rotate(-90, 14.4, 196.528)\" x=\"14.4\" y=\"196.528\">number of trials with this error</text>\n",
"</g>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"61.4526,330.323 61.4526,369.674 77.6726,369.674 77.6726,330.323 61.4526,330.323 61.4526,330.323 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 61.4526,330.323 61.4526,369.674 77.6726,369.674 77.6726,330.323 61.4526,330.323 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"77.6726,72.5707 77.6726,369.674 93.8926,369.674 93.8926,72.5707 77.6726,72.5707 77.6726,72.5707 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 77.6726,72.5707 77.6726,369.674 93.8926,369.674 93.8926,72.5707 77.6726,72.5707 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"93.8926,54.8626 93.8926,369.674 110.113,369.674 110.113,54.8626 93.8926,54.8626 93.8926,54.8626 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 93.8926,54.8626 93.8926,369.674 110.113,369.674 110.113,54.8626 93.8926,54.8626 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"110.113,84.3762 110.113,369.674 126.333,369.674 126.333,84.3762 110.113,84.3762 110.113,84.3762 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 110.113,84.3762 110.113,369.674 126.333,369.674 126.333,84.3762 110.113,84.3762 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"126.333,137.501 126.333,369.674 142.553,369.674 142.553,137.501 126.333,137.501 126.333,137.501 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 126.333,137.501 126.333,369.674 142.553,369.674 142.553,137.501 126.333,137.501 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"142.553,182.755 142.553,369.674 158.772,369.674 158.772,182.755 142.553,182.755 142.553,182.755 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 142.553,182.755 142.553,369.674 158.772,369.674 158.772,182.755 142.553,182.755 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"158.772,210.301 158.772,369.674 174.992,369.674 174.992,210.301 158.772,210.301 158.772,210.301 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 158.772,210.301 158.772,369.674 174.992,369.674 174.992,210.301 158.772,210.301 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"174.992,255.555 174.992,369.674 191.212,369.674 191.212,255.555 174.992,255.555 174.992,255.555 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 174.992,255.555 174.992,369.674 191.212,369.674 191.212,255.555 174.992,255.555 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"191.212,269.328 191.212,369.674 207.432,369.674 207.432,269.328 191.212,269.328 191.212,269.328 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 191.212,269.328 191.212,369.674 207.432,369.674 207.432,269.328 191.212,269.328 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"207.432,304.744 207.432,369.674 223.652,369.674 223.652,304.744 207.432,304.744 207.432,304.744 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 207.432,304.744 207.432,369.674 223.652,369.674 223.652,304.744 207.432,304.744 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"223.652,324.42 223.652,369.674 239.872,369.674 239.872,324.42 223.652,324.42 223.652,324.42 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 223.652,324.42 223.652,369.674 239.872,369.674 239.872,324.42 223.652,324.42 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"239.872,342.128 239.872,369.674 256.092,369.674 256.092,342.128 239.872,342.128 239.872,342.128 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 239.872,342.128 239.872,369.674 256.092,369.674 256.092,342.128 239.872,342.128 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"256.092,349.998 256.092,369.674 272.312,369.674 272.312,349.998 256.092,349.998 256.092,349.998 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 256.092,349.998 256.092,369.674 272.312,369.674 272.312,349.998 256.092,349.998 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"272.312,348.031 272.312,369.674 288.532,369.674 288.532,348.031 272.312,348.031 272.312,348.031 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 272.312,348.031 272.312,369.674 288.532,369.674 288.532,348.031 272.312,348.031 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"288.532,349.998 288.532,369.674 304.752,369.674 304.752,349.998 288.532,349.998 288.532,349.998 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 288.532,349.998 288.532,369.674 304.752,369.674 304.752,349.998 288.532,349.998 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"304.752,353.934 304.752,369.674 320.972,369.674 320.972,353.934 304.752,353.934 304.752,353.934 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 304.752,353.934 304.752,369.674 320.972,369.674 320.972,353.934 304.752,353.934 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"320.972,369.674 320.972,369.674 337.192,369.674 337.192,369.674 320.972,369.674 320.972,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 320.972,369.674 320.972,369.674 337.192,369.674 320.972,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"337.192,361.804 337.192,369.674 353.412,369.674 353.412,361.804 337.192,361.804 337.192,361.804 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 337.192,361.804 337.192,369.674 353.412,369.674 353.412,361.804 337.192,361.804 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"353.412,365.739 353.412,369.674 369.632,369.674 369.632,365.739 353.412,365.739 353.412,365.739 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 353.412,365.739 353.412,369.674 369.632,369.674 369.632,365.739 353.412,365.739 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"369.632,367.707 369.632,369.674 385.852,369.674 385.852,367.707 369.632,367.707 369.632,367.707 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 369.632,367.707 369.632,369.674 385.852,369.674 385.852,367.707 369.632,367.707 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"385.852,365.739 385.852,369.674 402.072,369.674 402.072,365.739 385.852,365.739 385.852,365.739 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 385.852,365.739 385.852,369.674 402.072,369.674 402.072,365.739 385.852,365.739 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"402.072,369.674 402.072,369.674 418.292,369.674 418.292,369.674 402.072,369.674 402.072,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 402.072,369.674 402.072,369.674 418.292,369.674 402.072,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"418.292,369.674 418.292,369.674 434.512,369.674 434.512,369.674 418.292,369.674 418.292,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 418.292,369.674 418.292,369.674 434.512,369.674 418.292,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"434.512,369.674 434.512,369.674 450.732,369.674 450.732,369.674 434.512,369.674 434.512,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 434.512,369.674 434.512,369.674 450.732,369.674 434.512,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"450.732,367.707 450.732,369.674 466.952,369.674 466.952,367.707 450.732,367.707 450.732,367.707 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 450.732,367.707 450.732,369.674 466.952,369.674 466.952,367.707 450.732,367.707 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"466.952,369.674 466.952,369.674 483.172,369.674 483.172,369.674 466.952,369.674 466.952,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 466.952,369.674 466.952,369.674 483.172,369.674 466.952,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"483.172,369.674 483.172,369.674 499.392,369.674 499.392,369.674 483.172,369.674 483.172,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 483.172,369.674 483.172,369.674 499.392,369.674 483.172,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"499.392,369.674 499.392,369.674 515.612,369.674 515.612,369.674 499.392,369.674 499.392,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 499.392,369.674 499.392,369.674 515.612,369.674 499.392,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"515.612,369.674 515.612,369.674 531.832,369.674 531.832,369.674 515.612,369.674 515.612,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 515.612,369.674 515.612,369.674 531.832,369.674 515.612,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"531.832,367.707 531.832,369.674 548.052,369.674 548.052,367.707 531.832,367.707 531.832,367.707 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 531.832,367.707 531.832,369.674 548.052,369.674 548.052,367.707 531.832,367.707 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"548.052,369.674 548.052,369.674 564.272,369.674 564.272,369.674 548.052,369.674 548.052,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 548.052,369.674 548.052,369.674 564.272,369.674 548.052,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"564.272,367.707 564.272,369.674 580.492,369.674 580.492,367.707 564.272,367.707 564.272,367.707 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 564.272,367.707 564.272,369.674 580.492,369.674 580.492,367.707 564.272,367.707 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"505.547,74.5015 578.063,74.5015 578.063,44.2615 505.547,44.2615 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip00)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 505.547,74.5015 578.063,74.5015 578.063,44.2615 505.547,44.2615 505.547,74.5015 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"511.547,65.4295 547.547,65.4295 547.547,53.3335 511.547,53.3335 511.547,65.4295 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip00)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 511.547,65.4295 547.547,65.4295 547.547,53.3335 511.547,53.3335 511.547,65.4295 \n",
" \"/>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:start;\" transform=\"rotate(0, 553.547, 63.8815)\" x=\"553.547\" y=\"63.8815\">y1</text>\n",
"</g>\n",
"</svg>\n"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"normal10float = generate_data(1000, randn, Float32, (10,10))\n",
"display_evaluation_figures(normal10float)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the prior tests all the matrixes elements have been small.\n",
"Either normally distributes, mean 0 and varience 1,\n",
"or uniformly distributed between 0 and 1.\n",
"But what happens when we look at matrices with element larger values?\n",
"To do this, we crank up the varience on the randn.\n",
"That is to say we generate our trial matrices using\n",
"`varience*randn(T,size)`.\n",
"Results follow for varience 10 thousand, 10 million and 10 billion.\n"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"err_jl:\tQ0=3.83e-18\t Q1=4.83e-18\t Q2=5.32e-18\t Q3=6.06e-18\t Q4=1.18e-17\n",
"err_tf:\tQ0=7.46e-18\t Q1=1.16e-17\t Q2=1.29e-17\t Q3=1.46e-17\t Q4=2.15e-17\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1m\u001b[34mINFO: binning = auto\n",
"\u001b[0m"
]
},
{
"data": {
"text/html": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 600 400\">\n",
"<defs>\n",
" <clipPath id=\"clip00\">\n",
" <rect x=\"0\" y=\"0\" width=\"600\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"0,400 600,400 600,0 0,0 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip01\">\n",
" <rect x=\"120\" y=\"0\" width=\"421\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"45.8815,369.674 596.063,369.674 596.063,23.3815 45.8815,23.3815 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip02\">\n",
" <rect x=\"45\" y=\"23\" width=\"551\" height=\"347\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 88.7705,364.48 88.7705,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 225.36,364.48 225.36,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 361.949,364.48 361.949,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 498.538,364.48 498.538,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,369.674 587.81,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,261.862 587.81,261.862 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,154.05 587.81,154.05 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,46.2376 587.81,46.2376 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 596.063,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 88.7705,369.674 88.7705,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 225.36,369.674 225.36,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 361.949,369.674 361.949,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 498.538,369.674 498.538,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 45.8815,23.3815 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 54.1342,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,261.862 54.1342,261.862 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,154.05 54.1342,154.05 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,46.2376 54.1342,46.2376 \n",
" \"/>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 88.7705, 381.674)\" x=\"88.7705\" y=\"381.674\">1</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 225.36, 381.674)\" x=\"225.36\" y=\"381.674\">2</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 361.949, 381.674)\" x=\"361.949\" y=\"381.674\">3</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 498.538, 381.674)\" x=\"498.538\" y=\"381.674\">4</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 374.174)\" x=\"44.6815\" y=\"374.174\">0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 266.362)\" x=\"44.6815\" y=\"266.362\">50</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 158.55)\" x=\"44.6815\" y=\"158.55\">100</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 50.7376)\" x=\"44.6815\" y=\"50.7376\">150</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:21; text-anchor:middle;\" transform=\"rotate(0, 320.972, 18)\" x=\"320.972\" y=\"18\">Histogram of relative error values for SVD reconstruction</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:16; text-anchor:middle;\" transform=\"rotate(0, 320.972, 397.6)\" x=\"320.972\" y=\"397.6\">factor by which Tensorflow error is greater than Julia (LAPACK) error</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:16; text-anchor:middle;\" transform=\"rotate(-90, 14.4, 196.528)\" x=\"14.4\" y=\"196.528\">number of trials with this error</text>\n",
"</g>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"61.4526,363.205 61.4526,369.674 88.7705,369.674 88.7705,363.205 61.4526,363.205 61.4526,363.205 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 61.4526,363.205 61.4526,369.674 88.7705,369.674 88.7705,363.205 61.4526,363.205 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"88.7705,348.112 88.7705,369.674 116.088,369.674 116.088,348.112 88.7705,348.112 88.7705,348.112 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 88.7705,348.112 88.7705,369.674 116.088,369.674 116.088,348.112 88.7705,348.112 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"116.088,309.299 116.088,369.674 143.406,369.674 143.406,309.299 116.088,309.299 116.088,309.299 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 116.088,309.299 116.088,369.674 143.406,369.674 143.406,309.299 116.088,309.299 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"143.406,292.049 143.406,369.674 170.724,369.674 170.724,292.049 143.406,292.049 143.406,292.049 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 143.406,292.049 143.406,369.674 170.724,369.674 170.724,292.049 143.406,292.049 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"170.724,216.581 170.724,369.674 198.042,369.674 198.042,216.581 170.724,216.581 170.724,216.581 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 170.724,216.581 170.724,369.674 198.042,369.674 198.042,216.581 170.724,216.581 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"198.042,171.3 198.042,369.674 225.36,369.674 225.36,171.3 198.042,171.3 198.042,171.3 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 198.042,171.3 198.042,369.674 225.36,369.674 225.36,171.3 198.042,171.3 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"225.36,136.8 225.36,369.674 252.678,369.674 252.678,136.8 225.36,136.8 225.36,136.8 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 225.36,136.8 225.36,369.674 252.678,369.674 252.678,136.8 225.36,136.8 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"252.678,59.1751 252.678,369.674 279.995,369.674 279.995,59.1751 252.678,59.1751 252.678,59.1751 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 252.678,59.1751 252.678,369.674 279.995,369.674 279.995,59.1751 252.678,59.1751 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"279.995,54.8626 279.995,369.674 307.313,369.674 307.313,54.8626 279.995,54.8626 279.995,54.8626 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 279.995,54.8626 279.995,369.674 307.313,369.674 307.313,54.8626 279.995,54.8626 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"307.313,130.331 307.313,369.674 334.631,369.674 334.631,130.331 307.313,130.331 307.313,130.331 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 307.313,130.331 307.313,369.674 334.631,369.674 334.631,130.331 307.313,130.331 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"334.631,162.675 334.631,369.674 361.949,369.674 361.949,162.675 334.631,162.675 334.631,162.675 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 334.631,162.675 334.631,369.674 361.949,369.674 361.949,162.675 334.631,162.675 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"361.949,233.831 361.949,369.674 389.267,369.674 389.267,233.831 361.949,233.831 361.949,233.831 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 361.949,233.831 361.949,369.674 389.267,369.674 389.267,233.831 361.949,233.831 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"389.267,285.581 389.267,369.674 416.585,369.674 416.585,285.581 389.267,285.581 389.267,285.581 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 389.267,285.581 389.267,369.674 416.585,369.674 416.585,285.581 389.267,285.581 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"416.585,307.143 416.585,369.674 443.903,369.674 443.903,307.143 416.585,307.143 416.585,307.143 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 416.585,307.143 416.585,369.674 443.903,369.674 443.903,307.143 416.585,307.143 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"443.903,341.643 443.903,369.674 471.22,369.674 471.22,341.643 443.903,341.643 443.903,341.643 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 443.903,341.643 443.903,369.674 471.22,369.674 471.22,341.643 443.903,341.643 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"471.22,358.893 471.22,369.674 498.538,369.674 498.538,358.893 471.22,358.893 471.22,358.893 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 471.22,358.893 471.22,369.674 498.538,369.674 498.538,358.893 471.22,358.893 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"498.538,365.362 498.538,369.674 525.856,369.674 525.856,365.362 498.538,365.362 498.538,365.362 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 498.538,365.362 498.538,369.674 525.856,369.674 525.856,365.362 498.538,365.362 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"525.856,365.362 525.856,369.674 553.174,369.674 553.174,365.362 525.856,365.362 525.856,365.362 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 525.856,365.362 525.856,369.674 553.174,369.674 553.174,365.362 525.856,365.362 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"553.174,365.362 553.174,369.674 580.492,369.674 580.492,365.362 553.174,365.362 553.174,365.362 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 553.174,365.362 553.174,369.674 580.492,369.674 580.492,365.362 553.174,365.362 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"505.547,74.5015 578.063,74.5015 578.063,44.2615 505.547,44.2615 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip00)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 505.547,74.5015 578.063,74.5015 578.063,44.2615 505.547,44.2615 505.547,74.5015 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"511.547,65.4295 547.547,65.4295 547.547,53.3335 511.547,53.3335 511.547,65.4295 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip00)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 511.547,65.4295 547.547,65.4295 547.547,53.3335 511.547,53.3335 511.547,65.4295 \n",
" \"/>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:start;\" transform=\"rotate(0, 553.547, 63.8815)\" x=\"553.547\" y=\"63.8815\">y1</text>\n",
"</g>\n",
"</svg>\n"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var10Knormal100double = generate_data(1000, (args...)->10_000*randn(args...), Float64, (100,100))\n",
"display_evaluation_figures(var10Knormal100double)"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"err_jl:\tQ0=3.74e-12\t Q1=4.85e-12\t Q2=5.37e-12\t Q3=6.15e-12\t Q4=1.10e-11\n",
"err_tf:\tQ0=7.98e-12\t Q1=1.17e-11\t Q2=1.32e-11\t Q3=1.48e-11\t Q4=2.38e-11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1m\u001b[34mINFO: binning = auto\n",
"\u001b[0m"
]
},
{
"data": {
"text/html": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 600 400\">\n",
"<defs>\n",
" <clipPath id=\"clip00\">\n",
" <rect x=\"0\" y=\"0\" width=\"600\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"0,400 600,400 600,0 0,0 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip01\">\n",
" <rect x=\"120\" y=\"0\" width=\"421\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"45.8815,369.674 596.063,369.674 596.063,23.3815 45.8815,23.3815 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip02\">\n",
" <rect x=\"45\" y=\"23\" width=\"551\" height=\"347\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 61.4526,364.48 61.4526,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 198.042,364.48 198.042,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 334.631,364.48 334.631,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 471.22,364.48 471.22,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,369.674 587.81,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,253.077 587.81,253.077 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,136.48 587.81,136.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 596.063,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 61.4526,369.674 61.4526,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 198.042,369.674 198.042,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 334.631,369.674 334.631,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 471.22,369.674 471.22,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 45.8815,23.3815 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 54.1342,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,253.077 54.1342,253.077 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,136.48 54.1342,136.48 \n",
" \"/>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 61.4526, 381.674)\" x=\"61.4526\" y=\"381.674\">1</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 198.042, 381.674)\" x=\"198.042\" y=\"381.674\">2</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 334.631, 381.674)\" x=\"334.631\" y=\"381.674\">3</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 471.22, 381.674)\" x=\"471.22\" y=\"381.674\">4</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 374.174)\" x=\"44.6815\" y=\"374.174\">0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 257.577)\" x=\"44.6815\" y=\"257.577\">50</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 140.98)\" x=\"44.6815\" y=\"140.98\">100</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:21; text-anchor:middle;\" transform=\"rotate(0, 320.972, 18)\" x=\"320.972\" y=\"18\">Histogram of relative error values for SVD reconstruction</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:16; text-anchor:middle;\" transform=\"rotate(0, 320.972, 397.6)\" x=\"320.972\" y=\"397.6\">factor by which Tensorflow error is greater than Julia (LAPACK) error</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:16; text-anchor:middle;\" transform=\"rotate(-90, 14.4, 196.528)\" x=\"14.4\" y=\"196.528\">number of trials with this error</text>\n",
"</g>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"61.4526,358.014 61.4526,369.674 88.7705,369.674 88.7705,358.014 61.4526,358.014 61.4526,358.014 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 61.4526,358.014 61.4526,369.674 88.7705,369.674 88.7705,358.014 61.4526,358.014 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"88.7705,330.031 88.7705,369.674 116.088,369.674 116.088,330.031 88.7705,330.031 88.7705,330.031 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 88.7705,330.031 88.7705,369.674 116.088,369.674 116.088,330.031 88.7705,330.031 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"116.088,269.401 116.088,369.674 143.406,369.674 143.406,269.401 116.088,269.401 116.088,269.401 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 116.088,269.401 116.088,369.674 143.406,369.674 143.406,269.401 116.088,269.401 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"143.406,220.43 143.406,369.674 170.724,369.674 170.724,220.43 143.406,220.43 143.406,220.43 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 143.406,220.43 143.406,369.674 170.724,369.674 170.724,220.43 143.406,220.43 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"170.724,96.8375 170.724,369.674 198.042,369.674 198.042,96.8375 170.724,96.8375 170.724,96.8375 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 170.724,96.8375 170.724,369.674 198.042,369.674 198.042,96.8375 170.724,96.8375 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"198.042,106.165 198.042,369.674 225.36,369.674 225.36,106.165 198.042,106.165 198.042,106.165 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 198.042,106.165 198.042,369.674 225.36,369.674 225.36,106.165 198.042,106.165 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"225.36,54.8626 225.36,369.674 252.678,369.674 252.678,54.8626 225.36,54.8626 225.36,54.8626 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 225.36,54.8626 225.36,369.674 252.678,369.674 252.678,54.8626 225.36,54.8626 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"252.678,68.8542 252.678,369.674 279.995,369.674 279.995,68.8542 252.678,68.8542 252.678,68.8542 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 252.678,68.8542 252.678,369.674 279.995,369.674 279.995,68.8542 252.678,68.8542 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"279.995,110.829 279.995,369.674 307.313,369.674 307.313,110.829 279.995,110.829 279.995,110.829 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 279.995,110.829 279.995,369.674 307.313,369.674 307.313,110.829 279.995,110.829 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"307.313,143.476 307.313,369.674 334.631,369.674 334.631,143.476 307.313,143.476 307.313,143.476 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 307.313,143.476 307.313,369.674 334.631,369.674 334.631,143.476 307.313,143.476 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"334.631,236.754 334.631,369.674 361.949,369.674 361.949,236.754 334.631,236.754 334.631,236.754 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 334.631,236.754 334.631,369.674 361.949,369.674 361.949,236.754 334.631,236.754 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"361.949,262.405 361.949,369.674 389.267,369.674 389.267,262.405 361.949,262.405 361.949,262.405 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 361.949,262.405 361.949,369.674 389.267,369.674 389.267,262.405 361.949,262.405 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"389.267,304.38 389.267,369.674 416.585,369.674 416.585,304.38 389.267,304.38 389.267,304.38 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 389.267,304.38 389.267,369.674 416.585,369.674 416.585,304.38 389.267,304.38 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"416.585,323.035 416.585,369.674 443.903,369.674 443.903,323.035 416.585,323.035 416.585,323.035 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 416.585,323.035 416.585,369.674 443.903,369.674 443.903,323.035 416.585,323.035 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"443.903,346.355 443.903,369.674 471.22,369.674 471.22,346.355 443.903,346.355 443.903,346.355 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 443.903,346.355 443.903,369.674 471.22,369.674 471.22,346.355 443.903,346.355 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"471.22,362.678 471.22,369.674 498.538,369.674 498.538,362.678 471.22,362.678 471.22,362.678 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 471.22,362.678 471.22,369.674 498.538,369.674 498.538,362.678 471.22,362.678 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"498.538,362.678 498.538,369.674 525.856,369.674 525.856,362.678 498.538,362.678 498.538,362.678 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 498.538,362.678 498.538,369.674 525.856,369.674 525.856,362.678 498.538,362.678 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"525.856,369.674 525.856,369.674 553.174,369.674 553.174,369.674 525.856,369.674 525.856,369.674 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 525.856,369.674 525.856,369.674 553.174,369.674 525.856,369.674 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"553.174,365.01 553.174,369.674 580.492,369.674 580.492,365.01 553.174,365.01 553.174,365.01 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 553.174,365.01 553.174,369.674 580.492,369.674 580.492,365.01 553.174,365.01 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"505.547,74.5015 578.063,74.5015 578.063,44.2615 505.547,44.2615 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip00)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 505.547,74.5015 578.063,74.5015 578.063,44.2615 505.547,44.2615 505.547,74.5015 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"511.547,65.4295 547.547,65.4295 547.547,53.3335 511.547,53.3335 511.547,65.4295 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip00)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 511.547,65.4295 547.547,65.4295 547.547,53.3335 511.547,53.3335 511.547,65.4295 \n",
" \"/>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:start;\" transform=\"rotate(0, 553.547, 63.8815)\" x=\"553.547\" y=\"63.8815\">y1</text>\n",
"</g>\n",
"</svg>\n"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var10Mnormal100double = generate_data(1000, (args...)->10_000_000*randn(args...), Float64, (100,100))\n",
"display_evaluation_figures(var10Mnormal100double)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"err_jl:\tQ0=3.80e-06\t Q1=4.91e-06\t Q2=5.40e-06\t Q3=6.22e-06\t Q4=1.07e-05\n",
"err_tf:\tQ0=7.85e-06\t Q1=1.16e-05\t Q2=1.30e-05\t Q3=1.46e-05\t Q4=2.20e-05\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1m\u001b[34mINFO: binning = auto\n",
"\u001b[0m"
]
},
{
"data": {
"text/html": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 600 400\">\n",
"<defs>\n",
" <clipPath id=\"clip00\">\n",
" <rect x=\"0\" y=\"0\" width=\"600\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"0,400 600,400 600,0 0,0 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip01\">\n",
" <rect x=\"120\" y=\"0\" width=\"421\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"45.8815,369.674 596.063,369.674 596.063,23.3815 45.8815,23.3815 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip02\">\n",
" <rect x=\"45\" y=\"23\" width=\"551\" height=\"347\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 61.4526,364.48 61.4526,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 198.042,364.48 198.042,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 334.631,364.48 334.631,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 471.22,364.48 471.22,28.5758 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,369.674 587.81,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,250.427 587.81,250.427 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:0.5; fill:none\" stroke-dasharray=\"1, 2\" points=\"\n",
" 54.1342,131.181 587.81,131.181 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 596.063,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 61.4526,369.674 61.4526,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 198.042,369.674 198.042,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 334.631,369.674 334.631,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 471.22,369.674 471.22,364.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 45.8815,23.3815 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,369.674 54.1342,369.674 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,250.427 54.1342,250.427 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 45.8815,131.181 54.1342,131.181 \n",
" \"/>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 61.4526, 381.674)\" x=\"61.4526\" y=\"381.674\">1</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 198.042, 381.674)\" x=\"198.042\" y=\"381.674\">2</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 334.631, 381.674)\" x=\"334.631\" y=\"381.674\">3</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 471.22, 381.674)\" x=\"471.22\" y=\"381.674\">4</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 374.174)\" x=\"44.6815\" y=\"374.174\">0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 254.927)\" x=\"44.6815\" y=\"254.927\">50</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 44.6815, 135.681)\" x=\"44.6815\" y=\"135.681\">100</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:21; text-anchor:middle;\" transform=\"rotate(0, 320.972, 18)\" x=\"320.972\" y=\"18\">Histogram of relative error values for SVD reconstruction</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:16; text-anchor:middle;\" transform=\"rotate(0, 320.972, 397.6)\" x=\"320.972\" y=\"397.6\">factor by which Tensorflow error is greater than Julia (LAPACK) error</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:16; text-anchor:middle;\" transform=\"rotate(-90, 14.4, 196.528)\" x=\"14.4\" y=\"196.528\">number of trials with this error</text>\n",
"</g>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"61.4526,367.289 61.4526,369.674 88.7705,369.674 88.7705,367.289 61.4526,367.289 61.4526,367.289 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 61.4526,367.289 61.4526,369.674 88.7705,369.674 88.7705,367.289 61.4526,367.289 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"88.7705,307.666 88.7705,369.674 116.088,369.674 116.088,307.666 88.7705,307.666 88.7705,307.666 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 88.7705,307.666 88.7705,369.674 116.088,369.674 116.088,307.666 88.7705,307.666 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"116.088,262.352 116.088,369.674 143.406,369.674 143.406,262.352 116.088,262.352 116.088,262.352 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 116.088,262.352 116.088,369.674 143.406,369.674 143.406,262.352 116.088,262.352 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"143.406,174.109 143.406,369.674 170.724,369.674 170.724,174.109 143.406,174.109 143.406,174.109 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 143.406,174.109 143.406,369.674 170.724,369.674 170.724,174.109 143.406,174.109 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"170.724,83.4818 170.724,369.674 198.042,369.674 198.042,83.4818 170.724,83.4818 170.724,83.4818 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 170.724,83.4818 170.724,369.674 198.042,369.674 198.042,83.4818 170.724,83.4818 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"198.042,100.176 198.042,369.674 225.36,369.674 225.36,100.176 198.042,100.176 198.042,100.176 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 198.042,100.176 198.042,369.674 225.36,369.674 225.36,100.176 198.042,100.176 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"225.36,59.6325 225.36,369.674 252.678,369.674 252.678,59.6325 225.36,59.6325 225.36,59.6325 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 225.36,59.6325 225.36,369.674 252.678,369.674 252.678,59.6325 225.36,59.6325 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"252.678,54.8626 252.678,369.674 279.995,369.674 279.995,54.8626 252.678,54.8626 252.678,54.8626 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 252.678,54.8626 252.678,369.674 279.995,369.674 279.995,54.8626 252.678,54.8626 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"279.995,104.946 279.995,369.674 307.313,369.674 307.313,104.946 279.995,104.946 279.995,104.946 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 279.995,104.946 279.995,369.674 307.313,369.674 307.313,104.946 279.995,104.946 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"307.313,178.879 307.313,369.674 334.631,369.674 334.631,178.879 307.313,178.879 307.313,178.879 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 307.313,178.879 307.313,369.674 334.631,369.674 334.631,178.879 307.313,178.879 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"334.631,233.733 334.631,369.674 361.949,369.674 361.949,233.733 334.631,233.733 334.631,233.733 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 334.631,233.733 334.631,369.674 361.949,369.674 361.949,233.733 334.631,233.733 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"361.949,264.737 361.949,369.674 389.267,369.674 389.267,264.737 361.949,264.737 361.949,264.737 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 361.949,264.737 361.949,369.674 389.267,369.674 389.267,264.737 361.949,264.737 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"389.267,314.821 389.267,369.674 416.585,369.674 416.585,314.821 389.267,314.821 389.267,314.821 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 389.267,314.821 389.267,369.674 416.585,369.674 416.585,314.821 389.267,314.821 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"416.585,348.21 416.585,369.674 443.903,369.674 443.903,348.21 416.585,348.21 416.585,348.21 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 416.585,348.21 416.585,369.674 443.903,369.674 443.903,348.21 416.585,348.21 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"443.903,329.13 443.903,369.674 471.22,369.674 471.22,329.13 443.903,329.13 443.903,329.13 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 443.903,329.13 443.903,369.674 471.22,369.674 471.22,329.13 443.903,329.13 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"471.22,362.519 471.22,369.674 498.538,369.674 498.538,362.519 471.22,362.519 471.22,362.519 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 471.22,362.519 471.22,369.674 498.538,369.674 498.538,362.519 471.22,362.519 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"498.538,364.904 498.538,369.674 525.856,369.674 525.856,364.904 498.538,364.904 498.538,364.904 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 498.538,364.904 498.538,369.674 525.856,369.674 525.856,364.904 498.538,364.904 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"525.856,362.519 525.856,369.674 553.174,369.674 553.174,362.519 525.856,362.519 525.856,362.519 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 525.856,362.519 525.856,369.674 553.174,369.674 553.174,362.519 525.856,362.519 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip02)\" points=\"\n",
"553.174,364.904 553.174,369.674 580.492,369.674 580.492,364.904 553.174,364.904 553.174,364.904 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip02)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 553.174,364.904 553.174,369.674 580.492,369.674 580.492,364.904 553.174,364.904 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"505.547,74.5015 578.063,74.5015 578.063,44.2615 505.547,44.2615 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip00)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 505.547,74.5015 578.063,74.5015 578.063,44.2615 505.547,44.2615 505.547,74.5015 \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip00)\" points=\"\n",
"511.547,65.4295 547.547,65.4295 547.547,53.3335 511.547,53.3335 511.547,65.4295 \n",
" \" fill=\"#0099ff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip00)\" style=\"stroke:#00002d; stroke-width:0.8; stroke-opacity:1; fill:none\" points=\"\n",
" 511.547,65.4295 547.547,65.4295 547.547,53.3335 511.547,53.3335 511.547,65.4295 \n",
" \"/>\n",
"<g clip-path=\"url(#clip00)\">\n",
"<text style=\"fill:#00002d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:start;\" transform=\"rotate(0, 553.547, 63.8815)\" x=\"553.547\" y=\"63.8815\">y1</text>\n",
"</g>\n",
"</svg>\n"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var10Gnormal100double = generate_data(1000, (args...)->10_000_000_000*randn(args...), Float64, (100,100))\n",
"display_evaluation_figures(var10Gnormal100double)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"What we see here, is that the distribution of relative errors remains the same, but the absolute errors increase.\n",
"i.e. TensorFlow is still generally has around 2.5 times the error of Julia.\n",
"Further for both TensorFlow and Julia, those absolute errors are increasing quadratically with the varience.\n",
"This is due to the use of sum of squared error, if we did sum of error, it would be linear increase.\n",
"So at high varience, this difference in accurasy could matter.\n",
"Since we are now looking at differences of $10^{-6}$ for example.\n",
"However, these differences remain small compaired to the values in the matrix eg $10^7$.\n",
"\n",
"In the end, the differences are not relevant to most people (Potentially not relevant to anyone).\n",
"It is merely a curiousity.\n",
"LAPACK is consistantly better at SVD than TensorFlow.\n",
"Really, one should not be too surprised given that having excellent matrix factorisation is what LAPACK is all about."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Julia 0.5.1",
"language": "julia",
"name": "julia-0.5"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "0.5.1"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment