This blog is about using Tensorflow with Python for machine learning. I'll start with giving some background information in order for the reader to better relate to what's coming up. I'll try to keep things short and to the point.
Academic background & work history
I have Ph.D. in computational materials physics and in the course of my studies, did numerical simulations about fracture of disordered media (paper specifically). The purpose of the research was to gain insight into fracture of paper so that paper machines could be run at higher speeds.
I started my simulations with Cray X-MP and Convex computers which had vector processors inside. Programming was easy since Cray's compiler output vectorized code, provided that usual design criteria for vectorization were met with.
In the middle of the graduate studies, computation platform changed to Cray T3E, which consisted of separate computer systems connected with fast optical fibre communications. For programming, libraries like PVM and MPI were used for distributing computations across CPUs.
Since 1998, I've been employed by Nokia, and involved in research, R&D, business management, and consultation roles in the area of telecommunications. Most recently, I have been involved in research related to 5G management and orchestration (M&O). This is an area which involves Machine Learning (ML) and aspects of Artificial Intelligence (AI), which have made my earlier experience with numerical programming relevant again. The big difference is that now one can do impressive computations with a general-purpose CPU and GPU in a mass-market computer system.
I started scientific programming with plain C. At Nokia, I used C++ for years, mostly for information transformations. During a short sabbatical, I read a book about Common Lisp and was impressed enough to switch to CL as my development platform. Later on, I switched to Clojure due to JVM integration and for a vibrant ecosystem with a great selection of libraries and a great package management system. I was interested in Haskell, and liked a lot some things like monads and comprehensions. I was put off by appalling package management system and a perception of clunky syntax compared to Lisp style syntax.
I was not interested in Python until had to give a hand to trainees with programming. I thought that slowness of Python's native data types (100+ times slower than native C) would be a showstopper. In getting to know Python, I got acquainted with Numpy library for efficient computations which mostly removed the main obstacle in terms of performance. I liked Haskell-style link comprehensions as well as ease of using functional programming concepts like map, reduce and lambda functions. Overall, the functional programming aspects of Python made it easy to switch from Clojure.
I switched to Python as my main programming environment and noticed a clear improvement in productivity for analytics and ML. The next frontier was using artificial neural networks (ANNs) in machine learning, which led naturally to starting to use Tensorflow.