使用tensorflow結合Docker來學習Machine Learning

建立 tensorflow docker

  • Port 8888 is for running TensorFlow programs from Jupyter notebook
  • http://localhost:8888/?token=
docker run -it -p 8888:8888 tensorflow/tensorflow

安裝 Git and Nano

  • select New ==> Terminal from the menu options on the page. A new terminal/console window will load.
add-apt-repository ppa:git-core/ppa
apt update
apt install git nano   // nano 也可以直接使用vi
git clone https://github.com/googlecodelabs/tensorflow-for-poets-2
cd tensorflow-for-poets-2

開始訓練

curl http://download.tensorflow.org/example_images/flower_photos.tgz | tar xz -C tf_files  // 下載測試檔
python scripts/retrain.py --bottleneck_dir=tf_files/bottlenecks --how_many_training_steps 500 --model_dir=tf_files/inception --output_graph=tf_files/retrained_graph.pb --output_labels=tf_files/retrained_labels.txt --image_dir tf_files/flower_photos

touch classify_image.py
nano classify_image.py

curl https://gist.githubusercontent.com/DanWahlin/2b0186897e8e5ab7be17c0d8ca86b569/raw/4d47eccb47c386814dfe1e387c81de9afaad6585/classify_image.py -O

建立 classify_image.py

# Originally created by Lin JungHsuan: https://medium.com/@linjunghsuan/create-a-simple-image-classifier-using-tensorflow-a7061635984a

import tensorflow as tf, sys
image_path = sys.argv[1]

# Read in the image_data
image_data = tf.gfile.FastGFile(image_path, 'rb').read()

# Loads label file, strips off carriage return
label_lines = [line.rstrip() for line
    in tf.gfile.GFile('./tf_files/retrained_labels.txt')]

# Unpersists graph from file
with tf.gfile.FastGFile('./tf_files/retrained_graph.pb', 'rb') as f:
    graph_def = tf.GraphDef()
    graph_def.ParseFromString(f.read())
    _ = tf.import_graph_def(graph_def, name='')

# Feed the image_data as input to the graph and get first prediction
with tf.Session() as sess:
    softmax_tensor = sess.graph.get_tensor_by_name('final_result:0')
    predictions = sess.run(softmax_tensor, {'DecodeJpeg/contents:0': image_data})

    # Sort to show labels of first prediction in order of confidence
    top_k = predictions[0].argsort()[-len(predictions[0]):][::-1]
    for node_id in top_k:
        human_string = label_lines[node_id]
        score = predictions[0][node_id]
        print('%s (score = %.5f)' % (human_string, score))
  • 執行
python classify_image.py tf_files/flower_photos/roses/17051448596_69348f7fce_m.jpg

###
* Close the Jupyter notebook webpage.
* Stop the container by pressing CTRL + C.
* remove the container 及 image

docker ps
docker rm [container_id]
docker images
docker rmi [image_id]