[PYTHON] Wie man mit Theano besetzt

Besetzung in Theano

theano ist eine sehr streng typisierte Bibliothek.

Es gibt keine leistungsstarke Typinferenz wie Python, daher sollten Sie natürlich die Besetzung nutzen.

Ich werde es vorerst besetzen

Die Besetzung von theano wird von theano.tensor.cast () implementiert.

Verwenden wir sofort cast. Standardmäßig wird eine als float64-Typ definierte Matrix in den int32-Typ konvertiert.

python


import theano.tensor as T
x = T.matrix()
x_as_int = T.cast(x, 'int32')

type(x), type(x_as_int)

Ausgabeergebnis


(theano.tensor.var.TensorVariable, theano.tensor.var.TensorVariable)

Ist es nicht besetzt?

In den obigen Ergebnissen zeigen beide den gleichen Typ (TensorVariable).

Dies liegt daran, dass die Theano-Spezifikation Symbole eher als Variablen als als Werte definiert.

Verwenden Sie theano.printing.debugprint (), um den Typ des Symbolinhalts anzuzeigen.

Art von x


import theano
theano.printing.debugprint(x)

Ausgabeergebnis


<TensorType(float64, matrix)> [id A]

x_as_int type


theano.printing.debugprint(x_as_int)

Ausgabeergebnis


Elemwise{Cast{int32}} [id A] ''   
 |<TensorType(float64, matrix)> [id B]

Ich sehe, es war ursprünglich ein float64-Typ, aber es scheint, dass er in x_as_int in int32 umgewandelt wird.

Geben Sie den Wert ein und überprüfen Sie das Verhalten.

Typ durch Funktion prüfen

Um einen Wert in ein Symbol einzufügen, müssen Sie eine Funktion definieren.

Durch Definieren einer Formel unter Verwendung von Symbolen als Funktion und Eingeben eines Werts in diese Funktion wird das Verarbeitungsergebnis der Formel als Rückgabewert der Funktion zurückgegeben.

Zu diesem Zeitpunkt hängt der Typ des Eingabewerts vom Typ des Symbols ab.

Wenn Sie einen unangemessenen Typ eingeben, wird eine Fehlermeldung angezeigt

Wenn Sie das int32-Typensymbol x_as_int als Eingabe festlegen, sollte eine Fehlermeldung angezeigt werden, wenn Sie einen Bruch eingeben.

Funktionsdefinition


import numpy as np

mat = np.array([[1.0, 0.0], [0.0, 1.0]], dtype="float64")
mat_int = np.array([[1, 0], [0, 1]], dtype="int32")

y = x * 2
f = theano.function(inputs=[x], outputs=y)

y_as_int = x_as_int * 2
f_as_int = theano.function(inputs=[x_as_int], outputs=y_as_int)

f(x)


f(mat)

Ausführungsergebnis


array([[ 2.,  0.],
       [ 0.,  2.]])

f(x_as_int)


f(mat_int)

Ausführungsergebnis


array([[ 2.,  0.],
       [ 0.,  2.]])

f_as_int(x)


f_as_int(mat)

Ausführungsergebnis



---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-56-31692f0163e9> in <module>()
----> 1 f_as_int(mat)

/home/ubuntu/anaconda3/lib/python3.5/site-packages/theano/compile/function_module.py in __call__(self, *args, **kwargs)
    786                         s.storage[0] = s.type.filter(
    787                             arg, strict=s.strict,
--> 788                             allow_downcast=s.allow_downcast)
    789 
    790                     except Exception as e:

/home/ubuntu/anaconda3/lib/python3.5/site-packages/theano/tensor/type.py in filter(self, data, strict, allow_downcast)
    138                             '"function".'
    139                             % (self, data.dtype, self.dtype))
--> 140                         raise TypeError(err_msg, data)
    141                 elif (allow_downcast is None and
    142                         type(data) is float and

TypeError: ('Bad input argument to theano function with name "<ipython-input-54-50af382d0dd4>:2" at index 0 (0-based)', 'TensorType(int32, matrix) cannot store a value of dtype float64 without risking loss of precision. If you do not mind this loss, you can: 1) explicitly cast your data to int32, or 2) set "allow_input_downcast=True" when calling "function".', array([[ 1.,  0.],
       [ 0.,  1.]]))

f_as_int(x_as_int)


array([[2, 0],
       [0, 2]], dtype=int32)

Wie erwartet hat f_as_int (mat), das den Typ int32 als Eingabesymbol und den Eingabewert als Typ float64 angegeben hat, einen Fehler ausgegeben.

Jetzt können Sie die Zauberbewegung in theano sicher sehen.

Recommended Posts

Wie man mit Theano besetzt
Wie aktualisiere ich mit SQLAlchemy?
Wie mit SQLAlchemy ändern?
So trennen Sie Zeichenfolgen mit ','
Wie man RDP auf Fedora31 macht
Wie lösche ich mit SQLAlchemy?
So brechen Sie RT mit tweepy ab
Python: So verwenden Sie Async mit
Verwendung von Klassen in Theano
So verwenden Sie virtualenv mit PowerShell
Wie fange ich mit Scrapy an?
Umgang mit dem DistributionNotFound-Fehler
Wie fange ich mit Django an?
Aufblasen von Daten (Datenerweiterung) mit PyTorch
So berechnen Sie das Datum mit Python
So installieren Sie den MySQL-Connector mit pip3
So verbinden Sie INNER mit SQL Alchemy
So installieren Sie Anaconda mit pyenv
So installieren Sie Theano unter Mac OS X mit Homebrew
So führen Sie eine arithmetische Verarbeitung mit der Django-Vorlage durch
[Blender] So legen Sie shape_key mit dem Skript fest
Wie man mit matplotlib mehrere Figuren betitelt
So erhalten Sie die Eltern-ID mit sqlalchemy
So installieren Sie DLIB mit aktiviertem 2020 / CUDA
Verwendung von ManyToManyField mit Djangos Admin
Verwendung von OpenVPN mit Ubuntu 18.04.3 LTS
Verwendung von Cmder mit PyCharm (Windows)
So verhindern Sie Paketaktualisierungen mit apt
So arbeiten Sie mit BigQuery in Python
Wie man Ass / Alembic mit HtoA benutzt
Umgang mit Enum-Kompatibilitätsfehlern
Verwendung von Japanisch mit NLTK-Plot
Wie man einen Taschentest mit Python macht
So suchen Sie in Google Colaboratory nach Google Drive
So zeigen Sie Python-Japanisch mit Lolipop an
So laden Sie YouTube-Videos mit youtube-dl herunter
Verwendung des Jupyter-Notebooks mit ABCI
So schalten Sie Linux unter Ultra96-V2 aus
Verwendung des CUT-Befehls (mit Beispiel)
Wie man mit Python-Flüchen Japanisch eingibt
So installieren Sie zsh (mit .zshrc-Anpassung)
Wie man Problemdaten mit Paiza liest
Verwendung von SQLAlchemy / Connect mit aiomysql
So gruppieren Sie Volumes mit LVM
So installieren Sie Python3 mit Docker Centos
Verwendung des JDBC-Treibers mit Redash
Mit Python besetzen
Hochladen mit Heroku, Flask, Python, Git (4)
Umgang mit Speicherlecks in matplotlib.pyplot
Erstellen von CSV-Beispieldaten mit Hypothese
Lesen einer CSV-Datei mit Python 2/3
Verwendung der GCP-Ablaufverfolgung mit offener Telemetrie
So reduzieren Sie die GPU-Speichernutzung mit Keras