Wie repariere ich MatMul Op hat den Typ float64, der nicht zum Typ passt float32 TypeError?

8

Ich versuche, Nueral Network-Gewichtungen in einer Datei zu speichern und dann diese Wertigkeiten wiederherzustellen, indem ich das Netzwerk initialisiere anstelle einer zufälligen Initialisierung. Mein Code funktioniert gut mit zufälliger Initialisierung. Aber, wenn ich Gewichte von der Datei initialisiere, zeigt es mir einen Fehler TypeError: Input 'b' of 'MatMul' Op has type float64 that does not match type float32 of argument 'a'. Ich weiß nicht, wie ich dieses Problem löse. Hier ist mein Code:

Modellinitialisierung

%Vor%

Modellparameter

%Vor%

FEHLERDETAILS

    
Noman Dilawar 24.03.2016, 22:12
quelle

2 Antworten

18

Die tf.matmul() -Option führt keine automatischen Typkonvertierungen durch Daher müssen beide Eingaben den gleichen Elementtyp haben. Die angezeigte Fehlermeldung weist auf einen Aufruf von tf.matmul() hin, wobei das erste Argument den Typ tf.float32 und das zweite Argument den Typ tf.float64 hat. Sie müssen eine der Eingaben so konvertieren, dass sie der anderen entspricht, zum Beispiel mit tf.cast(x, tf.float32) .

Wenn ich Ihren Code betrachte, sehe ich nirgendwo, dass ein tf.float64 Tensor explizit erstellt wird (der Standard dtype für Fließkommawerte in der TensorFlow Python API - zB für tf.constant(37.0) -is tf.float32 ). Ich würde vermuten, dass die Fehler von den np.loadtxt(filename) -Aufrufen verursacht werden, die möglicherweise ein np.float64 -Array laden. Sie können sie explizit so ändern, dass np.float32 arrays (die in tf.float32 tensors konvertiert werden) wie folgt geladen werden:

%Vor%     
mrry 24.03.2016, 22:35
quelle
1

Obwohl es eine alte Frage ist, aber ich würde gerne hinzufügen, dass ich auf dasselbe Problem gestoßen bin. Ich habe es mit dtype=tf.float64 für die Parameterinitialisierung und für die Erstellung von X- und Y-Platzhaltern gelöst.

Hier ist der Snap meines Codes.

%Vor%

und

%Vor%

Wenn Sie alle plocholders und Parameter mit dem float64-Datentyp deklarieren, wird dieses Problem gelöst.

    
Abdul Karim Khan 02.12.2017 04:17
quelle