2017-12-12 2 views
1

I Floyd-Hub verwendet haben, um das folgende Modell zu trainieren und sie gespeichertLaden Keras Modellfehler: Keine Opkernel wurde registriert Op zu unterstützen ‚Assign‘ mit diesen attrs

# Create the model 
model = Sequential() 
model.add(Conv2D(32, (3, 3), input_shape=(3, 32, 32), activation='relu', padding='same')) 
model.add(Dropout(0.2)) 
model.add(Conv2D(32, (3, 3), activation='relu', padding='same')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Conv2D(64, (3, 3), activation='relu', padding='same')) 
model.add(Dropout(0.2)) 
model.add(Conv2D(64, (3, 3), activation='relu', padding='same')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Conv2D(128, (3, 3), activation='relu', padding='same')) 
model.add(Dropout(0.2)) 
model.add(Conv2D(128, (3, 3), activation='relu', padding='same')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Flatten()) 
model.add(Dropout(0.2)) 
model.add(Dense(1024, activation='relu', kernel_constraint=maxnorm(3))) 
model.add(Dropout(0.2)) 
model.add(Dense(512, activation='relu', kernel_constraint=maxnorm(3))) 
model.add(Dropout(0.2)) 
model.add(Dense(num_classes, activation='softmax')) 
# Compile model 
epochs = 50 
adammax = keras.optimizers.Adamax(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0) 

model.compile(loss='categorical_crossentropy', optimizer=adammax, metrics=['accuracy']) 
print(model.summary()) 

Wenn ich versuche, es auf laden mein PC, es funktioniert gut. Aber wenn ich es auf den Raspberry Pi lade bekomme ich den folgenden Fehler. Ich habe auch versucht, nur die Gewichte zu speichern und zu laden, aber es hat nicht funktioniert und den gleichen Fehler bekommen. Ich benutze die gleiche Version von Tensorflow wie Floyd Hub auf dem Raspberry Pi.

enter image description here enter image description here

+1

Hallo! Sie versuchen, Operationen mit einem Int64-Datentyp auszuführen, aber Tensorflow unterstützt nur Int32 auf ARM. (Nur ARM 32 Bit wird offiziell unterstützt.) Bitte versuchen Sie auf der Seite, Ihren Traceback als Text und nicht als Bild einzufügen. – Lescurel

+0

@Lescurel irgendwelche Empfehlungen, wie man ein Tensorflow-Modell richtig in Raspberry portiert? – Paddy

+0

@Paddy: Ich weiß nicht, was Sie erreichen möchten, aber Sie könnten einfach Tensoren mit 'tf.int32' Datentyp anstelle von' tf.int64' verwenden. In vielen Fällen benötigen Sie die zusätzlichen 32 Bits nicht. Keine Ahnung wie man es mit Keras oder Floydhub macht. Sie könnten auch versuchen, dieser [Anleitung] zu folgen (http://zhiyisun.github.io/2017/02/15/Running-Google-Machine-Learning-Library-Tensorflow-On-ARM-64-bit-Platform.html) wie Tensorflow für ARM64 kompiliert wird (Beachten Sie, dass ich es nicht getestet habe) – Lescurel

Antwort

0

Wie oben erwähnt, Sie vorbei T = DT_INT64, während die nicht einer der unterstützten Kernel für diese op ist. Sie können sehen, ob die int64-Version gerade nicht in der .so-Datei ausgeliefert wird, schreiben Sie den op-Kernel selbst oder versuchen Sie, direkt vor diesem op im Python-Code zu tf.int32 zu casten. Der letzte hat gut für mich funktioniert.

Verwandte Themen