#!/usr/bin/env luajit
+--[[
+
+ Written by Francois Fleuret (francois@fleuret.org)
+
+ This is free and unencumbered software released into the public
+ domain.
+
+ Anyone is free to copy, modify, publish, use, compile, sell, or
+ distribute this software, either in source code form or as a
+ compiled binary, for any purpose, commercial or non-commercial, and
+ by any means.
+
+ In jurisdictions that recognize copyright laws, the author or
+ authors of this software dedicate any and all copyright interest in
+ the software to the public domain. We make this dedication for the
+ benefit of the public at large and to the detriment of our heirs
+ and successors. We intend this dedication to be an overt act of
+ relinquishment in perpetuity of all present and future rights to
+ this software under copyright law.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ For more information, please refer to <http://unlicense.org/>
+
+]]--
+
require 'torch'
require 'nn'
require 'profiler'
+-- Create a model
+
local model = nn.Sequential()
-model:add(nn.Linear(1000, 1000))
-model:add(nn.ReLU())
-model:add(nn.Linear(1000, 100))
+ :add(nn.Sequential()
+ :add(nn.Linear(1000, 1000))
+ :add(nn.ReLU())
+ )
+ :add(nn.Linear(1000, 100))
+
+-- Decor it for profiling
profiler.decor(model)
+-- Create the data and criterion
+
local input = torch.Tensor(1000, 1000)
local target = torch.Tensor(input:size(1), 100)
local criterion = nn.MSECriterion()
local modelTime = 0
local dataTime = 0
+-- Loop five times through the data forward and backward
+
for k = 1, 5 do
local t1 = sys.clock()
+
input:uniform(-1, 1)
target:uniform()
nbSamples = nbSamples + input:size(1)
end
+-- Print the accumulated timings
+
profiler.print(model, nbSamples)
print('----------------------------------------------------------------------')