2017-02-08 8 views
0
require 'nn' 
criterion = nn.ClassNLLCriterion() 
print(criterion) 

これはLUAトーチは、文字列に印刷()の出力を取得する方法を

nn.ClassNLLCriterion 
{ 
    sizeAverage : true 
    output : 0 
    gradInput : DoubleTensor - empty 
    output_tensor : DoubleTensor - size: 1 
    target : LongTensor - size: 1 
    total_weight_tensor : DoubleTensor - size: 1 
} 

私はログ記録の目的のために、この印刷出力を取得したいと思い出力します。誰もそれを行う方法を知っていますか?

+0

私はトーチを知らないが、 'tostring(criterion)'を試してみる。 – lhf

+0

'tostring(criterion)'は 'nn.ClassNLLCriterion'だけを返します。残念なことに追加の情報はありません – han4wluc

+1

他に誰もアイデアがない場合は、' print'をどのように再定義したか、あるいは基準の '__tostring'物事はまだそのように働く)は、長いバージョンを吐くことに寛容にすることができます。それはソースにいくらかの掘り起こしを必要とするかもしれないが、実行可能でなければならない。 'debug.getinfo(getmetatable(criterion).__tostring、" S ")'が動作し、役に立つ情報が得られるかどうかを調べてください(情報が入ったテーブルがあり、 '__tostring'がLuaで書かれていると、ファイルと行の範囲を指定します; Cの場合は "[C]"と表示されます)。 (そして、 'print'で同じgetinfoを試してみてください)。 – nobody

答えて

1

私はこの出力をどのように取得するのか分かりません。このコードを実行すると、nn.ClassNLLCriterionとなります。たぶん異なるルア/トーチバージョン?

とにかく、この情報を文字列に入れたい場合は、自分で抽出する必要があります。これは簡単なループをやって行うことができます。

for k,v in pairs(criterion) do 
    print(k,v) 
end 

あなたは空想の印刷出力をしたいなら、私はあなたが(コメントで示唆@nobodyなど)TREPLのコードを見てお勧めします。それはすべてLuaにあるので、複製がとても簡単です。より正確には、彼らのsizestr()print_new()、およびprintvar()の機能を推奨します。それらを単に印刷する代わりに変更するだけで、文字列を構成します。

そのsizestr機能を使用して簡単な例:

-- Copy/Paste from trepl/init.lua 
local function sizestr(x) 
    local strt = {} 
    if _G.torch.typename(x):find('torch.*Storage') then 
    return _G.torch.typename(x):match('torch%.(.+)') .. ' - size: ' .. x:size() 
    end 
    if x:nDimension() == 0 then 
    table.insert(strt, _G.torch.typename(x):match('torch%.(.+)') .. ' - empty') 
    else 
    table.insert(strt, _G.torch.typename(x):match('torch%.(.+)') .. ' - size: ') 
    for i=1,x:nDimension() do 
     table.insert(strt, x:size(i)) 
     if i ~= x:nDimension() then 
     table.insert(strt, 'x') 
     end 
    end 
    end 
    return table.concat(strt) 
end 


local function sutoringu(elem) 
    local str = '' 
    if torch.isTensor(elem) then 
    str = sizestr(elem) 
    else 
    str = tostring(elem) 
    end 
    return str 
end 

local str = '{\n' 
local tab = ' ' 
for k,v in pairs(criterion) do 
    str = str .. tab .. k .. ' : ' .. sutoringu(v) .. '\n' 
end 
str = str .. '}' 

print(str) 

これは、プロセス内の文字列を構築し、望んだものと同じものを出力します。それは最適ではありませんが、それはスタートです。

関連する問題