Sie können tf.py_func
verwenden, um Python-Funktionen aufzurufen. Die Operationen innerhalb der Funktion können auch auf der GPU ausgeführt werden. Zum Beispiel können wir einen Op und seinen Gradienten rein in Python hinzufügen, der Caffe auf GPU aufruft:
def custom_loss_impl(x):
caffe.set_mode_gpu()
caffe.set_device(0)
...
return np.float32(loss)
def custom_loss(x):
tf.RegisterGradient("custom_loss_grad")(custom_loss_grad)
g=tf.get_default_graph()
with g.gradient_override_map({"PyFunc":"custom_loss_grad"}):
return tf.py_func(custom_loss_impl,[x],[tf.float32])[0]
def custom_loss_grad_impl(x):
caffe.set_mode_gpu()
caffe.set_device(0)
custom_loss_impl(x)
...
return np.float32(gradient)
def custom_loss_grad(op,grad):
x=op.inputs[0]
return tf.py_func(custom_loss_grad_impl,[x],[tf.float32])#assume grad=1
Wie kann ich den Vorgang auf GPU ausführen? Muss ich diese GPU-Version auf C++ implementieren? Gibt es eine Möglichkeit, den Code in Python zu schreiben? –
Ich glaube nicht, dass es eine Möglichkeit gibt, die GPU-Operation in Python zu schreiben. Sie können immer versuchen, eine andere Frage mit der Implementierung, die Sie im Sinn haben, zu öffnen und jemand wird vielleicht eine Idee haben, um es direkt in TensorFlow zu implementieren. –