2016-03-21 8 views
5

ich Theano jetzt lerne aber es gibt immer einige problems.my Code ist wie folgt:Warum kann ich nicht theano.tensor.argmax verwenden und theano.tensor.mean richtig

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

dachte ich, es würde drucken den Index '4', aber das Ergebnis ist.

argmax 

was mehr ist, als ich bin mit T.neq() wie folgt:

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) 

die r eiter zeigt:

Elemwise{neq,no_inplace}.0 

ich wirklich neu in diesem und haben keine Ahnung, habe ich etwas vermissen danken Ihnen im Voraus ..

Antwort

5

T.argmax() ist eine Theano TensorVariable Art erwartet?. Einige der in Theano verwendeten Variablentypen sind here aufgeführt. Lassen Sie sich vom Namen "voll typisierte Konstrukteure" nicht abschrecken. Denken Sie darüber nach, welche Art von Daten Sie als Eingabe verwenden möchten. Verwenden Sie Float-Matrizen? Dann ist der relevante TensorVariable-Typ wahrscheinlich "fmatrix". Handelst du mit Chargen von RGB-Bilddaten? Dann ist der relevante TensorVariable-Typ wahrscheinlich "tensor4".

In Ihrem Code versuchen wir, einen Listentyp in T.argmax() einzugeben. Von oben gesehen wird das nicht funktionieren. Beachten Sie auch, dass der Typ (T.argmax (a)) ein theano.tensor.var.TensorVariable-Typ ist. Daher erwartet es eine TensorVariable als Eingabe und gibt auch einen TensorVariable-Typ aus. So wird dies nicht die tatsächliche Argmax zurückgeben.

Okay, also was funktioniert? Wie können wir diese Berechnung in Theano machen?

Lassen Sie uns zuerst den Datentyp identifizieren, mit dem Sie arbeiten möchten. Dies wird der Ausgangspunkt unserer Computergrafik sein, die wir aufbauen werden. In diesem Fall sieht es so aus, als würden wir uns mit Arrays oder Vektoren beschäftigen. Theano hat einen Ivector-Typ, der ein Vektor von ganzen Zahlen ist, oder einen Fvector-Typ, der ein Vektor von float32-Werten ist. Lassen Sie sich mit Ihren Daten halten und tun ivector da wir ganzzahlige Werte haben:

x = T.ivector('input') 

Diese Linie gerade ein TensorVariable x, die von uns beabsichtigten Eingabetyp darstellt, ein Array von ganzen Zahlen.

Lassen Sie uns jetzt einen TensorVariable für die argmax der Elemente von x definieren:

y = T.argmax(x) 

Bisher haben wir einen Berechnungsgraphen aufgebaut haben, die eine Reihe von ganzen Zahlen als Eingabe erwartet und ausgibt die argmax davon Array. Um jedoch zu tatsächlich zu tun, haben wir diese in eine Funktion zu kompilieren:

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

Die theano.function Syntax here gefunden werden kann.

Stellen Sie sich diese Funktion so vor, als ob sie nun die Berechnung ausführt, die wir mit x und y definiert haben.

Wenn ich ausführen:

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

Es gibt:

array(4) 

Was haben wirklich tun wir? Indem wir Theano-Variablen definieren und dieano.tensor-Funktionen verwenden, erstellen wir einen Computergraphen. Wir haben dann die Funktion "amano.function" verwendet, um eine Funktion zu kompilieren, die diese Berechnung tatsächlich an tatsächlichen Eingaben durchführt, die wir spezifizieren.

Um zu beenden: wie die nicht gleich Operation zu tun?

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]) 

zurückkehren wird:

[1,1,1,1] 

Einer der wichtigsten konzeptionellen Unterschiede ist, dass ich die a, b als Theanos TensorVariables behandeln, anstatt sie explizit Variablen zugewiesen wird.

Sie werden den Dreh raus bekommen, denken Sie daran, dass Sie Ihre Berechnung in Bezug auf Theano TensorVariables definieren müssen, und um sie dann tatsächlich zu verwenden, müssen Sie sie mit theano.function kompilieren.

+0

vielen dank! – Chris

Verwandte Themen