TensorFlow unter macOS – „Vorsicht Stufe“

TensorFlow unter macOS – „Vorsicht Stufe“

Die Installation von TensorFlow unter macOS verläuft in der Regel genauso unkompliziert wie auch unter Linux oder Windows. Jedoch schlummern auf dem Mac Betriebssystem einige Stolperfallen, die ziemlich schnell Frust aufkommen lassen. Besonders mit einigen häufig verwenden Lib’s wie Matplotlib kann es schnell Ärger geben. Doch der Reihe nach. Üblicherweise verläuft das Aufsetzen von TensorFlow wie folgt:

Nach Installation von Anaconda und Erzeugung eines Anaconda Environments (z.b. in PyCharm), kann TensorFlow einfach mit

$ pip install tensorflow

eingebunden werden. Der kurze Standardtest bestätigt die erfolgreiche Installation:

import tensorflow as tf
hello = tf.constant('Hello, I am TensorFlow!')
sess = tf.Session()
print(sess.run(hello))

Die Matplotlib darf natürlich auch nicht fehlen und kann genauso installiert und eingebunden werden.

import tensorflow as tf
import numpy
import matplotlib.pyplot as plt

Voller Tatendrang geht es dann ans erste Projekt. Spätestens bei der Plot() Methode gibt es dann ein böses Erwachen.

(..)File „/anaconda3/envs/TESTproj/lib/python3.6/site-packages/matplotlib/backends/backend_macosx.py“, line 17, in <module>
from matplotlib.backends import _macosx

RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are using (Ana)Conda please install python.app and replace the use of ‚python‘ with ‚pythonw‘. See ‚Working with Matplotlib on OSX‘ in the Matplotlib FAQ for more information.

Die Ursache liegt in der Defaulteinstellung von Cocoa als Image Rendering Backed. Damit kann die Methode plot() von Matplotlib nichts anfangen, da macOS das Ausführen ohne interactive mode blockt. Abhilfe schafft das forcierte setzen des Backends (Qt4Ag, GTKAgg, TkAgg etc.) mit den folgenden Zeilen:

import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt

Danach sollte es wieder mit dem Anzeigen von Plots klappen.

    plt.plot(test_X, test_Y, 'bo', label='Testing data')
    plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label='Fitted line')
    plt.legend()
    plt.show()


-Vasilios Danos

Leave a reply

Your email address will not be published.

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>