2016-02-01 3 views
0

Я работал над созданием набора данных XOR gate с torch7. Но когда я напечатал набор данных, я увидел, что данные были неправильными, но я не смог найти ошибку. В коде нет ничего плохого. Но я новичок в факеле, поэтому могут произойти ошибки.Неожиданное поведение при torch7

Итак, вот мой код

input = torch.Tensor (4,2) 
input:random(0,1) 

output = torch.Tensor(1) 
dataset={}; 
function dataset:size() return 4 end 
for i=1,dataset:size() do 
    if input[i][1]==input[i][2] then 
    output[1] = 0 
    else 
    output[1] = 1 
    end 
    print("original") 
    print(input[i][1].." "..input[i][2].." "..output[1]) -- the values that are going to dataset 
    dataset[i] = {input[i], output} 
    print("dataset") 
    print(dataset[i][1][1].." "..dataset[i][1][2].." "..dataset[i][2][1]) -- for double checking i read from dataset again 
end 

print("Why dataset is different now?") 
for i=1,4 do 
    print(dataset[i][1][1].." "..dataset[i][1][2].." "..dataset[i][2][1]) -- So, why this is different? 
    end 

Как вы можете видеть, я напечатал значение, которые вставляются в dataset список и для двойной проверки я прочитал от dataset снова.

И, наконец, я проверил от dataset после полной установки. Набор данных был каким-то иным. Я побежал пару раз. Каждый раз это было по-другому. Как он застрял на 1 или 0.

Так вот мой выход

original  
1 0 1 
dataset 
1 0 1 
original  
0 0 0 
dataset 
0 0 0 
original  
1 1 0 
dataset 
1 1 0 
original  
0 0 0 
dataset 
0 0 0 
Why dataset is different now? 
1 0 0 
0 0 0 
1 1 0 
0 0 0 

Как вы можете видеть, формат как этот

input input output

Я напечатанной оригинал, когда я прочитал от ввода [i] и вывода.

Я напечатал набор данных, когда прочитал из набора данных, после того, как был вставлен.

Также вы можете видеть, что первый набор значений отличается при печати. Это должно быть 1 0 1. Но это 1 0 0.

Я не смог найти ошибку в своем коде. Может ли кто-нибудь помочь? Если вопрос непонятен, сообщите мне.

ответ

1

Проблема находится здесь: dataset[i] = {input[i], output}
Вы не сохраняете вычисленный результат, вы сохраняете ссылку на значение, которое изменяется с последующими вычислениями для функции «xor».
Естественно, когда вы читаете результат, вы всегда получаете одинаковое число - последний результат записывается в output[1]
Чтобы исправить это, либо измените переменную output, чтобы сохранить фактическое временное значение (не таблицу), либо, по крайней мере, прочитать фактическое значение с вывода таблицу при сохранении в наборе данных [i], не просто сохранить ссылку на таблицу, вы не получите такую ​​глубокую копию.

+0

Спасибо :). Я понимаю. Это похоже на питон? –

+0

Да, в значительной степени, как в python :) – Vlad

Смежные вопросы