2016-03-21 14 views
5

uczę się teraz Theano ale zawsze są jakieś Kod problems.my się następująco:Dlaczego nie mogę używać theano.tensor.argmax i theano.tensor.mean poprawnie

import theano 
from numpy import * 
import theano.tensor as T 
a = [1,2,3,4] 
b = [7,8,9,10] 
print T.argmax(a) 

Myślałem, że będzie wydrukować indeks '4', ale wynik jest:.

argmax 

co więcej, gdy używam T.neq() tylko w następujący sposób:

import theano 
from numpy import * 
import theano.tensor as T 
a = [1,2,3,4] 
b = [7,8,9,10] 
print T.neq(a,b) 

R esult pokazuje:

Elemwise{neq,no_inplace}.0 

naprawdę nowy na tym i nie mam pojęcia, czy tęsknię niczego z góry dziękuję ..

Odpowiedz

5

T.argmax() spodziewa się typ Theano TensorVariable?. Niektóre typy zmiennych używanych w Theano są wymienione na here. Nie pozwól, aby nazwa "konstruktorzy w pełni wypisanych" przestraszyła Cię. Zastanów się nad nimi bardziej pod kątem rodzaju danych, które chcesz wykorzystać jako dane wejściowe. Czy używasz macierzy float? Odpowiednim typem TensorVariable jest prawdopodobnie "fmatrix". Czy masz do czynienia z partiami danych obrazu RGB? Odpowiednim typem TensorVariable jest prawdopodobnie "tensor4".

W twoim kodzie, próbujemy wprowadzić typ listy do T.argmax(). Z powyższego punktu widzenia to nie zadziała. Zwróć też uwagę, że typ (T.argmax (a)) jest typem theano.tensor.var.TensorVariable. Oczekuje więc TensorVariable jako danych wejściowych i wyprowadza również typ TensorVariable. To nie spowoduje zwrotu rzeczywistego argmax.

OK, więc co działa? Jak możemy to zrobić w Theano?

Najpierw określmy typ danych, którymi chcemy się zajmować. To będzie punkt wyjściowy naszego wykresu obliczeniowego, który będziemy budować. W tym przypadku wygląda na to, że chcemy poradzić sobie z tablicami lub wektorami. Theano ma typ ivector, który jest wektorem liczb całkowitych lub typu fvector, który jest wektorem wartości float32. Trzymajmy ze swoimi danymi i nie ivector ponieważ mamy wartości:

x = T.ivector('input') 

Linia ta właśnie stworzył TensorVariable X, który reprezentuje nasz zamierzony typ wejścia, tablicę liczb całkowitych.

Teraz zdefiniować TensorVariable dla argmax z elementów X:

y = T.argmax(x) 

tej pory zbudowaliśmy obliczeniowej wykres, który spodziewa tablicę liczb całkowitych jako wejście i będzie wyjście argmax tego szyk. Jednak, aby rzeczywiście to zrobić, musimy skompilować to do funkcji:

get_argmax = theano.function([x], y) 

Składnia theano.function można znaleźć here.

Pomyśl o tej funkcji, tak jak teraz, wykonując obliczenia, które zdefiniowaliśmy za pomocą x i y.

Kiedy wykonać:

get_argmax([1,2,3,4,19,1]) 

Zwraca:

array(4) 

Więc co tak naprawdę zrobić? Definiując zmienne Theano i używając funkcji theano.tensor, tworzymy wykres obliczeniowy. Następnie użyliśmy theano.function, aby skompilować funkcję, która faktycznie wykonuje to obliczenie na rzeczywistych wejściach, które określamy.

Aby zakończyć: jak wykonać operację "nie równa się"?

a = T.ivector('a') 
b = T.ivector('b') 
out = T.neq(a,b) 
get_out = theano.function([a,b], out) 
print get_out([1,2,3,4], [7,8,9,10]) 

powróci:

[1,1,1,1] 

Jednym z kluczowych różnic koncepcyjnych jest to, że traktuję A, B jak TensorVariables Theano, zamiast przypisywania im wyraźne zmienne.

Dostaniesz się z tego, ale pamiętaj, że musisz zdefiniować swoje obliczenia w kategoriach Theano TensorVariables, a następnie, aby faktycznie "użyć", musisz skompilować je za pomocą theano.function.

+0

dziękuję bardzo! – Chris

Powiązane problemy