機械学習ライブラリTensorFlow超入門

TensorFlow超入門

1 概要

1.1 TensorFlowの概要

  • Pythonが人気になった一番の理由かもしれない、超有名AIライブラリ
  • 最新バージョンのバイナリ配布物はCPUの拡張命令であるAVXをサポートされている必用あり(AVX無しタイプのバイナリを生成すれば、AVX拡張命令の無いCPUでも実行可能)

1.2 この文書の概要

  • TensorFlow関係の入門者用文書
  • Dockerイメージを利用して行う
  • 実際の作業部分を真似しやすいように作成
  • 学習手順として、実際やってみてから、修正したり調べた方が効率良いケースが多い為
  • ベースはTensorflowの本家の文書なので、この文書のライセンスもTensorflowの本家と同じとします。

2 リンク

3 インストール(今後動画では直接環境にインストールするのではなく、Docker経由で作業を行います。次の章で使うDocker イメージを作成します。)

  • 最新バイナリはCPUの拡張命令AVXを利用するバイナリになっています。AVX命令をサポートしていないCPUの場合は、1.5以前のバージョンのtensorflowを使えば、コンパイル無しに利用可能(コンパイルルすれば、新しいバージョンでも使えますが、マシン性能にもよりますが、コンパイルに24時間程度必用)
  • 環境差を軽減するため、Dockerを利用して作業していきます。
  • WindowsやMacの場合、Ubuntu等Linuxの仮想環境や模擬環境であれば、ほぼ同じ操作で可能だと思います。
  • 直接インストールしてもほぼ同じような手順で作業可能

3.1 以下の操作を行っている動画


3.2 Dockerによるローカルへのインストール手順

  • まずDockerをインストールしてください。「利用OS Docker インストール」でネット検索あるいは、Docker本家の文書にインストール手順https://docs.docker.com/install/が確認出来ます。
  • Linux系なら、docker.io パッケージをインストール(Debian,Ubuntuなら sudo apt install docker.io )で簡単にインストール出来ます。

3.2.1 Dockerで提供されているtensorflow/tensorflowのイメージpull

docker pull tensorflow/tensorflow
docker pull tensorflow/tensorflow:latest-py3-jupyter

3.2.2 動作確認

  • 以下の起動コマンドはhttps://hub.docker.com/r/tensorflow/tensorflow/で確認可能、一番下のRunning Containersに説明あり(ここでは説明していない起動方法もあり)
  • 以下のコマンドを実行し、表示されるlocalhost:8888のURLをブラウザで開く
docker run -it --rm -v $(realpath ~/notebooks):/tf/notebooks -p 8888:8888 tensorflow/tensorflow:latest-py3-jupyter
  • ブラウザじゃなくて、コマンドラインで動かしたい場合は以下
docker run -it --rm tensorflow/tensorflow bash

4 最初の実行

4.1 関係する部分のリファレンス

4.2 本家のBeginner quickstart部分

#!/usr/bin/env python
# coding: utf-8

# In[1]:


# tutorial 
# https://www.tensorflow.org/tutorials
# https://www.tensorflow.org/tutorials/quickstart/beginner
import tensorflow as tf
import numpy as np
tf.__version__


# In[2]:


mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()  # データ読み込み
x_train, x_test = x_train / 255.0, x_test / 255.0         # 正規化


# In[3]:


# モデルの構築
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),          # 入力の形式指定
  tf.keras.layers.Dense(128, activation='relu'),          # 活性化関数としてrelu(ランプ関数)を使って、ノード128のlayer作成
  tf.keras.layers.Dropout(0.2),                           # 過学習を軽減する為らしい
  tf.keras.layers.Dense(10, activation='softmax')         # 関数softmax
])

model.compile(optimizer='adam',
	      loss='sparse_categorical_crossentropy',
	      metrics=['accuracy'])


# In[4]:


model.fit(x_train, y_train, epochs=5)

model.evaluate(x_test,  y_test, verbose=2)


# In[5]:


x_train.shape


# In[6]:


y_train.shape


# In[7]:


x_train[0][0]


# In[8]:


len(np.array(x_train)[0])


# In[9]:


y_train[2]


# In[10]:


x_train[0]


# In[11]:


import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.imshow(x_train[2], cmap="gray")
print(y_train[2])


# In[12]:


model.predict(x_train)


# In[13]:


type(x_train)


# In[14]:


type(x_train[0])


# In[15]:


model.predict_classes(np.stack([x_train[0],x_train[1]]))


# In[16]:


(y_train[0],y_train[1])


# In[17]:


ps=model.predict_classes(x_test)


# In[18]:


ps


# In[19]:


fx=x_test[ps!=y_test]
fy=y_test[ps!=y_test]
fps=ps[ps!=y_test]
fps2=y_test[ps!=y_test]


# In[20]:


[fx.shape,fy.shape]


# In[21]:


fps


# In[22]:


fps2


# In[23]:


fig2, ax2 = plt.subplots()
ax2.imshow(fx[0], cmap="gray")


# In[24]:


fig3, ax3 = plt.subplots()
ax3.imshow(fx[1], cmap="gray")


# In[25]:


print(y_test.shape)


# In[26]:


100.0*len(fx)/len(y_test)


# In[27]:


model.evaluate(x_test,  y_test, verbose=2)


# In[ ]:
  • 上を実行したら
In [1]:
# tutorial 
# https://www.tensorflow.org/tutorials
# https://www.tensorflow.org/tutorials/quickstart/beginner
import tensorflow as tf
import numpy as np
tf.__version__
Out[1]:
'2.1.0'
In [2]:
mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
In [3]:
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
In [4]:
model.fit(x_train, y_train, epochs=5)

model.evaluate(x_test,  y_test, verbose=2)
Train on 60000 samples
Epoch 1/5
60000/60000 [==============================] - 6s 106us/sample - loss: 0.3013 - accuracy: 0.9128
Epoch 2/5
60000/60000 [==============================] - 6s 100us/sample - loss: 0.1450 - accuracy: 0.9567
Epoch 3/5
60000/60000 [==============================] - 6s 101us/sample - loss: 0.1108 - accuracy: 0.9673
Epoch 4/5
60000/60000 [==============================] - 6s 102us/sample - loss: 0.0891 - accuracy: 0.9724
Epoch 5/5
60000/60000 [==============================] - 6s 101us/sample - loss: 0.0775 - accuracy: 0.9751
10000/10000 - 1s - loss: 0.0728 - accuracy: 0.9780
Out[4]:
[0.07283716697944329, 0.978]
In [5]:
x_train.shape
Out[5]:
(60000, 28, 28)
In [6]:
y_train.shape
Out[6]:
(60000,)
In [7]:
x_train[0][0]
Out[7]:
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
In [8]:
len(np.array(x_train)[0])
Out[8]:
28
In [9]:
y_train[2]
Out[9]:
4
In [10]:
x_train[0]
Out[10]:
array([[0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.01176471, 0.07058824, 0.07058824,
        0.07058824, 0.49411765, 0.53333333, 0.68627451, 0.10196078,
        0.65098039, 1.        , 0.96862745, 0.49803922, 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.11764706, 0.14117647,
        0.36862745, 0.60392157, 0.66666667, 0.99215686, 0.99215686,
        0.99215686, 0.99215686, 0.99215686, 0.88235294, 0.6745098 ,
        0.99215686, 0.94901961, 0.76470588, 0.25098039, 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.19215686, 0.93333333, 0.99215686,
        0.99215686, 0.99215686, 0.99215686, 0.99215686, 0.99215686,
        0.99215686, 0.99215686, 0.98431373, 0.36470588, 0.32156863,
        0.32156863, 0.21960784, 0.15294118, 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.07058824, 0.85882353, 0.99215686,
        0.99215686, 0.99215686, 0.99215686, 0.99215686, 0.77647059,
        0.71372549, 0.96862745, 0.94509804, 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.31372549, 0.61176471,
        0.41960784, 0.99215686, 0.99215686, 0.80392157, 0.04313725,
        0.        , 0.16862745, 0.60392157, 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.05490196,
        0.00392157, 0.60392157, 0.99215686, 0.35294118, 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.54509804, 0.99215686, 0.74509804, 0.00784314,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.04313725, 0.74509804, 0.99215686, 0.2745098 ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.1372549 , 0.94509804, 0.88235294,
        0.62745098, 0.42352941, 0.00392157, 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.31764706, 0.94117647,
        0.99215686, 0.99215686, 0.46666667, 0.09803922, 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.17647059,
        0.72941176, 0.99215686, 0.99215686, 0.58823529, 0.10588235,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.0627451 , 0.36470588, 0.98823529, 0.99215686, 0.73333333,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.97647059, 0.99215686, 0.97647059,
        0.25098039, 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.18039216,
        0.50980392, 0.71764706, 0.99215686, 0.99215686, 0.81176471,
        0.00784314, 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.15294118, 0.58039216, 0.89803922,
        0.99215686, 0.99215686, 0.99215686, 0.98039216, 0.71372549,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.09411765, 0.44705882, 0.86666667, 0.99215686, 0.99215686,
        0.99215686, 0.99215686, 0.78823529, 0.30588235, 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.09019608, 0.25882353,
        0.83529412, 0.99215686, 0.99215686, 0.99215686, 0.99215686,
        0.77647059, 0.31764706, 0.00784314, 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.07058824, 0.67058824, 0.85882353, 0.99215686,
        0.99215686, 0.99215686, 0.99215686, 0.76470588, 0.31372549,
        0.03529412, 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.21568627,
        0.6745098 , 0.88627451, 0.99215686, 0.99215686, 0.99215686,
        0.99215686, 0.95686275, 0.52156863, 0.04313725, 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.53333333,
        0.99215686, 0.99215686, 0.99215686, 0.83137255, 0.52941176,
        0.51764706, 0.0627451 , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        ]])
In [11]:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.imshow(x_train[2], cmap="gray")
print(y_train[2])
4
In [12]:
model.predict(x_train)
Out[12]:
array([[3.1222185e-11, 6.9625267e-10, 4.9216315e-09, ..., 9.0638885e-10,
        6.4819944e-10, 5.1220550e-08],
       [9.9997747e-01, 3.0144658e-11, 2.0699679e-05, ..., 2.7271714e-09,
        1.1915243e-09, 1.8208118e-06],
       [5.7959029e-09, 2.2825763e-05, 1.6314464e-04, ..., 2.7926173e-05,
        5.3994507e-05, 1.9133378e-05],
       ...,
       [5.1175184e-12, 8.8972918e-09, 4.4402681e-13, ..., 1.0011616e-10,
        5.6010720e-08, 1.8483890e-06],
       [4.7604684e-05, 1.5032154e-07, 1.6677732e-05, ..., 3.6445201e-07,
        1.3603052e-07, 1.1720140e-08],
       [9.7213610e-04, 5.9256303e-07, 1.5326268e-04, ..., 1.7348322e-05,
        9.9865472e-01, 1.6498259e-04]], dtype=float32)
In [13]:
type(x_train)
Out[13]:
numpy.ndarray
In [14]:
type(x_train[0])
Out[14]:
numpy.ndarray
In [15]:
model.predict_classes(np.stack([x_train[0],x_train[1]]))
Out[15]:
array([5, 0])
In [16]:
(y_train[0],y_train[1])
Out[16]:
(5, 0)
In [17]:
ps=model.predict_classes(x_test)
In [18]:
ps
Out[18]:
array([7, 2, 1, ..., 4, 5, 6])
In [19]:
fx=x_test[ps!=y_test]
fy=y_test[ps!=y_test]
fps=ps[ps!=y_test]
fps2=y_test[ps!=y_test]
In [20]:
[fx.shape,fy.shape]
Out[20]:
[(220, 28, 28), (220,)]
In [21]:
fps
Out[21]:
array([6, 9, 8, 2, 0, 4, 7, 7, 0, 9, 0, 2, 6, 8, 4, 9, 8, 9, 9, 9, 4, 0,
       5, 2, 8, 6, 8, 0, 1, 2, 4, 9, 5, 1, 2, 3, 6, 3, 0, 1, 9, 5, 7, 6,
       4, 6, 0, 7, 0, 2, 8, 3, 4, 0, 2, 0, 9, 2, 9, 8, 9, 9, 1, 0, 7, 0,
       9, 1, 5, 2, 5, 6, 6, 0, 0, 1, 1, 0, 4, 5, 1, 1, 4, 9, 0, 2, 2, 7,
       5, 7, 2, 9, 0, 9, 9, 9, 0, 1, 4, 2, 0, 3, 0, 3, 2, 6, 3, 1, 4, 3,
       3, 6, 5, 8, 1, 4, 4, 9, 3, 3, 7, 9, 7, 8, 3, 7, 5, 7, 3, 3, 4, 7,
       1, 5, 9, 9, 4, 5, 6, 3, 0, 4, 0, 6, 8, 4, 1, 2, 0, 2, 6, 8, 9, 8,
       7, 6, 0, 2, 9, 3, 8, 3, 8, 9, 9, 0, 9, 9, 3, 3, 8, 6, 0, 9, 7, 6,
       7, 8, 0, 7, 6, 8, 8, 8, 9, 8, 8, 8, 9, 7, 2, 6, 6, 9, 6, 2, 2, 2,
       2, 5, 4, 8, 7, 3, 8, 6, 0, 6, 2, 0, 0, 0, 0, 1, 4, 7, 8, 0, 2, 6])
In [22]:
fps2
Out[22]:
array([5, 4, 9, 4, 6, 8, 2, 3, 6, 4, 8, 8, 4, 1, 8, 4, 5, 7, 4, 8, 5, 6,
       6, 7, 6, 4, 3, 4, 6, 7, 9, 4, 9, 7, 7, 8, 8, 5, 7, 7, 7, 1, 8, 4,
       6, 2, 2, 3, 8, 7, 2, 8, 9, 5, 7, 2, 8, 7, 7, 4, 4, 7, 8, 2, 3, 6,
       4, 6, 3, 1, 0, 5, 5, 8, 9, 9, 2, 2, 2, 3, 7, 6, 9, 4, 8, 3, 3, 9,
       3, 9, 1, 5, 6, 8, 7, 4, 6, 9, 6, 3, 5, 9, 7, 2, 7, 4, 7, 7, 9, 5,
       1, 4, 3, 2, 7, 9, 9, 0, 8, 9, 2, 7, 9, 2, 5, 2, 9, 3, 5, 5, 9, 8,
       9, 6, 4, 7, 8, 3, 4, 8, 6, 9, 9, 8, 0, 8, 7, 3, 3, 7, 1, 1, 7, 1,
       3, 8, 7, 4, 4, 5, 3, 5, 3, 3, 3, 2, 3, 3, 9, 9, 5, 2, 9, 8, 9, 2,
       0, 0, 9, 8, 1, 4, 4, 5, 8, 1, 5, 2, 3, 4, 7, 0, 8, 4, 5, 7, 7, 7,
       7, 8, 9, 0, 2, 6, 2, 5, 4, 5, 4, 2, 5, 5, 2, 4, 9, 2, 6, 6, 3, 5],
      dtype=uint8)
In [23]:
fig2, ax2 = plt.subplots()
ax2.imshow(fx[0], cmap="gray")
Out[23]:
<matplotlib.image.AxesImage at 0x7f9e6c78a4a8>
In [24]:
fig3, ax3 = plt.subplots()
ax3.imshow(fx[1], cmap="gray")
Out[24]:
<matplotlib.image.AxesImage at 0x7f9e6c73d2b0>
In [25]:
print(y_test.shape)
(10000,)
In [26]:
100.0*len(fx)/len(y_test)
Out[26]:
2.2
In [27]:
model.evaluate(x_test,  y_test, verbose=2)
10000/10000 - 1s - loss: 0.0728 - accuracy: 0.9780
Out[27]:
[0.07283716697944329, 0.978]
In [ ]:
 

4.3 この章のまとめ

  • 実際に学習させ、学習させたものを評価してみた
  • データがどのようになっているのか確認した

5 サンプル classification.ipynb (Fashion MNIST dataset)

  • Docker image tensorflow/tensorflow に含まれているサンプル
  • 中身は前章のサンプルとほぼ同じで、違うのは、データの指定
fashion_mnist = keras.datasets.fashion_mnist
  • なので前章でやったものを以下に修正
# mnist = tf.keras.datasets.mnist
mnist = tf.keras.datasets.fashion_mnist
  • なので前章のデータを keras.datasets.fashion_mnist にしてやればほぼ同じ
  • あと学習のepochの数値が5->10になっている
  • ここでは、前章のファイルのデータ読み込み部分だけ変更して実行してみる
  • 後でサンプルを実行して内容確認してみてください。
  • サンプルファイルを開いて、Shift+Enter連打で動きます。
  • イメージの起動は以下のコマンド
docker run -it --rm -v $(realpath ~/notebooks):/tf/notebooks -p 8888:8888 tensorflow/tensorflow:latest-py3-jupyter

5.1 以下の操作を行っている動画


6 サンプル regression.ipynb (車の燃費関係のデータ)

  • Docker image tensorflow/tensorflow に含まれているサンプル
  • gitをインストールしないと動かないので、シェルを起動して、gitをインストール
apt install git
  • 後はサンプルファイルを開いて、Shift+Enter連打で動きます。
  • イメージの起動は以下のコマンド
docker run -it --rm -v $(realpath ~/notebooks):/tf/notebooks -p 8888:8888 tensorflow/tensorflow:latest-py3-jupyter

6.1 以下の操作を行っている動画


7 サンプル object_detection.ipynbを動かしてみる

7.1 以下の操作を行っている動画


7.2 事前準備

  • 以下のコマンドを実行し、表示されるlocalhost:8888のURLをブラウザで開く
docker run -it --rm -v $(realpath ~/notebooks):/tf/notebooks -p 8888:8888 tensorflow/tensorflow:latest-py3-jupyter
  • 必用なフォントと、必用なパッケージを追加でインストール(シェルを立ち上げて)
pip3 install tensorflow_hub
pip3 install pillow
apt install fonts-liberation
  • 元のノートをダウンロード、コマンドラインで行うなら以下、ブラウザでダウンロードして、ホームディレクトリのnotebooksフォルダに入れてもOK
cd ~/notebooks/
wget https://github.com/tensorflow/hub/raw/master/examples/colab/object_detection.ipynb

7.3 ソースの修正

def draw_boxes(image, boxes, class_names, scores, max_boxes=10, min_score=0.1):
...省略
      display_str = "{}: {}%".format(class_names[i].numpy().decode("ascii"),
                                     int(100 * scores[i]))
  • 上の部分を以下に修正(numpy()を除く)
def draw_boxes(image, boxes, class_names, scores, max_boxes=10, min_score=0.1):
...省略
      display_str = "{}: {}%".format(class_names[i].decode("ascii"),
                                     int(100 * scores[i]))

7.4 実行

  • Shift + Enter を押しまくり、実行
  • 最後にシートを保存

7.5 この章について

  • object detectionのサンプルソースを動かしてみた
  • すでに訓練してくれてるデータが配布されていた
  • 一部ソースを修正しないと動かなかった
  • Dockerのtensorflow/tensorflowのイメージで動かすには追加のパッケージをインストールする必用があった

8 モデルの保存と読み込み

8.1 以下の操作を行っている動画


8.2 保存する命令

  • 色々保存する種類があるが、ディレクトリに保存する場合
  • tensorflow/tensflowに含まれているサンプル(save_and_load.ipynb) の例
  • saved_modelディレクトリにmy_modelで保存する場合
.... ここまでにモデルを作成し、学習した後に
!mkdir -p saved_model
model.save('saved_model/my_model') 

8.3 読み込む命令

  • tensorflow/tensflowに含まれているサンプル(save_and_load.ipynb) の例
  • saved_modelディレクトリにmy_modelを保存してある場合
  • new_modelに読み込み
new_model = tf.keras.models.load_model('saved_model/my_model')

9 続きを追記してきます。

10 この文書のチェンジログ

  • 2020/01/23 初版
  • 2020/01/24 3,4章追加
  • 2020/01/24 5章 サンプル object_detection.ipynbを動かしてみる を追加

著者: NM Max

Created: 2020-01-27 月 21:44

Validate

Lenovo-G580で利用可能と思われるCPUについて

前の記事でG570の交換可能CPUを調べたので、今度はG580についても同じように調べてみました。(チップセットを調べて、そのチップセットで利用可能なCPUを調べる)

G580のチップセットは「G580 チップセット」でネット検索すると、ここがヒットしました。「モバイル インテル® HM76 Express チップセット」とのことです。

このチップセットに対応しているCPUは、ここに情報がありました。このページの左下の「対応する製品」をたどると、対応CPUがでてきます。

製品のマニュアルがここにありました。ハードウェア関係のマニュアルもみつけて、これみれば、もっと簡単にCPUの交換できてたきがした。こないだ交換した時きづけてなかった。

製品のラインナップで使われていたCPUはここで確認できました。(G580製品一覧でネット検索)

Lenovo-G570で交換可能なCPUについて

先日Lenovo-G580のCPUを適当に選択して交換して、今使えてるのですが、G570も持ってて、今アマゾンで新品で購入可能なCore iシリーズは使えるのか気になって調べてみました。

第二世代(Sandy Bridge)のマシンのようです、G570

CPUのソケットの形が第二世代と第三世代(Ivy Bridge)で同じらしく、全部使えるのか、一部なのかよくわかりませんでした。

G570のチップセットを調べてみると([Lenovo G570 チップセット]でネット検索)

https://www.lenovo.com/medias/g570-rt-0809.pdf?context=bWFzdGVyfGltYWdlc3wxNzIwMzd8YXBwbGljYXRpb24vcGRmfGltYWdlcy9oNDQvaDMwLzkzMzM5Mzk5NjE4ODYucGRmfDU1MWRjOTM5MmU1ODMxYTM3NzIyZDE5YThiZTRiNjViMDdmZTE0ZmQwYjI0ZWU0MDQ4M2E0OWFhOTczZDg5NTQ

モバイル インテル® HM65 Express チップセット を使っていると確認できました

このチップセットに対応しているCPUの確認方法はここのURLの左下の対応している製品をクリックすると見れます。(直接リンクはるURL不明)

他の部品の相性とかで動かない可能性もあるので、動作確認が取れてるCPUにした方が安全だとはおもいますが(動作確認の取れているCPUの情報は、「G570 CPU交換」等でネット検索かけると調べれます。

過去のG570のシリーズで使用されているCPUなら安全度高いかも(マザーボードのバージョン等で動かないものあるかもしれないけど)

メインマシン(Lenovo-G580)のCPUを交換しました

Celeron(一番安いタイプ)を購入しており、tensorflowのバイナリがavx命令を使うバイナリで、コンパイルに24時間程度必用なため、新しいPC購入しようかと考えたのですが、CPUの交換でもいけるか調べると、1万からずCPU交換して、avx命令に対応可能だったので、そっちにしました。

Amazonで Intel(R) Core(TM) i5-3230M CPU を購入し、

Lenovo-G580 CPU交換

でネット検索かけて、出てきた動画をみながら、CPU交換しました。

ほぼほぼ、全分解に近い分解しないと、CPUと対面不可能で、しかも交換後のテスト起動で画面がでてこず、CPUの選定あやまったかな?っと思いましたが、CPUの締め付けのネジを180度まわさず100度くらいで固くなったのでやめてたのを、180度になるまでガンと締め付けて、再度テストしたら上手く動作し、画面も出て、メモリテストを動作させてもエラーがでない状態になりました。

一時は、元のCPUに戻さないといけないかもって思ったけど。本当に良かった

後で調べ直してみると、i7のivy bridge(第三世代)でも良かったみたいで、どうせ交換するならi7系にすべきだったかもって、ちょっと後悔した

第二世代のSandy Bridge とCPUソケットの形は同じっていうことらしく、G570も持ってて、そっちは第二世代らしい。
G570に第三世代のCPUをいれてみた猛者の情報を探したけど、みつからなかった。

全分解しないといけないので、また外すの面倒、外さないなら、もう1個買う必用が…。
どうしよかな?って考えてます。(G570の方のCPU交換)

ということで

  • Lenovo-G580のCPU交換は大変、ほぼほぼ全分解しないとCPU交換出来ない
  • Intel(R) Core(TM) i5-3230M がG580で正常動作した
  • CPU締め付けのネジは180度まわしきりましょう!

追記)ハードウェアマニュアルが存在し、それをみながら交換した方が良い(後で気づきました。)

CPU交換に関係ないけど、マニュアルはここみたい。

Git超簡単入門

Git超簡単入門

1 Git概要

  • バージョン管理ソフト
  • 昔のバージョンからの変更内容とか、昔のバージョンへの巻き戻し等が可能

2 Gitのインストール

sudo apt install git

3 Gitの初期設定

  • ユーザー名、メールアドレスは適切なもので
git config --global user.name "ユーザー名"
git config --global user.email "メールアドレス"

4 超基本操作

4.1 gitで管理するための最初の呪文(init)

  • 管理したいディレクトリで以下のコマンドを実行
git init
  • これにより、gitで管理する情報の保管先(.gitディレクトリが掘られ、その中に管理情報をいれてく)

4.2 現状の状態をセーブ(commit)

  • コメント文書には変更のメモを書く、logみた時に何を変更した状態かわかりやすくなるように
git add -A
git commit -m "コメント文書" 

4.3 今までのセーブ(commit)状態を確認(log)

git log

4.4 現在の状態確認(status)

git status

4.5 最後のcommitからの変更内容確認(diff)

git diff
  • 特定のファイルの変更だけ表示する場合は
git diff ファイル名

4.6 修正したファイルを最後にcommitした時の状態に戻す

git checkout ファイル名

4.7 以前commitした状態にする

  • git log でログを確認して、戻したい状態のid(英数の長い文字列)を確認
git reset --hard  戻したい状態のid

4.7.1 これを間違って行ってしまった時に戻す方法

  • 以下のコマンドでみえなくなったlogを確認
git reflog
  • 戻すべきHEAD@{数字}を確認するか、idを確認し、以下のコマンドを実行
git reset --hard 確認した識別子

4.8 超基本操作を使ってみる操作例

4.8.1 上の説明と例の操作を行っている動画


4.8.2 練習操作例その1

  • 説明読むと、色々出来ることが多く、内容複雑で理解するのに効率悪い
  • 実際に使ってみて、説明を読み、また使ってみるのループがお勧め、効率良くなる
  • 練習用のディレクトリを作成しそこにはいる
  • 初期化するコマンドを入れる
git init
  • 適当な内容でファイルを作成
  • 状態確認してみる
git status
  • 下を実行するが初期設定を行っていないため怒られる
git add -A
git commit -m "最初のバージョン" 
  • メールアドレス”you@example.com”、ユーザー名を “Your Name”で登録してますが、実際やるときはちゃんとした内容で
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
  • 初期設定を行ったので再度
git commit -m "最初のバージョン" 
  • ログ確認
git log
  • ファイルに追加
  • 差分を確認
git diff
  • 修正後をセーブ(commit)
git add -A
git commit -m "ファイル内容追加"
  • ログ確認
git log
  • 新しいファイル2を追加
  • 修正をセーブ
git add -A
git commit -m "ファイル内容追加"
  • ログ確認
git log
  • 状態確認
git status
  • ファイルを修正し、最後のセーブ状態に戻す
git checkout 2
  • 最初のバージョンに戻す
  • まずログを確認
git log
  • 巻き戻す
git reset --hard 確認したid
  • 2ファイルがないこと、最初のファイルの内容が元に戻っていることを確認
  • ログ確認
git log
  • 最後の巻き戻し前に戻る
git reflog
  • 上のコマンドで確認したidを利用して戻す
git reset --hard 確認したidその2

5 今後

  • 今後も文書追加していきます。

6 この文書のチェンジログ

  • 2020/01/07 初版

著者: NM Max

Created: 2020-01-07 火 20:09

Validate

Freeciv 勝ち方

Freecivでの勝ち方

1 Freeciv概要

  • シミュレーションゲーム
  • 文明を進化させて他の勢力を倒すか、勝利条件の宇宙入植を行うことで勝利に(デフォルトルール)
  • 初心者で適当にやるとコンピューターにほぼほぼ負けちゃう

2 Freecivインストール

sudo apt install freeciv freeciv-client-gtk3 freeciv-client-extras
  • UbuntuやDebianで音楽パッケージも追加するなら以下
sudo apt install freeciv-sound-standard 

3 Freeciv勝ち方1

3.1 世界の不思議と言われる特殊建築物を他の勢力より先に建築し手に入れる

  • 早いもの勝ちなので、他の勢力より先に重要な世界の不思議を建築すべし
  • 超重要なのは、アレクサンドリア図書館、ミケランジェロの協会、J.S.バッハの大聖堂

3.2 最も重要な世界の不思議

  • アレクサンドリア図書館(「識字」まで研究が進むと建築可能になる)
  • 他の勢力2つが手に入れた研究を自国でもゲット出来る脅威のアイテム、初心者はこれをゲット出来なければ、再度やり直すべきレベル

3.2.1 アレクサンドリア図書館手に入れるまでの解説動画


3.3 研究の進め方のお勧め案(アレクサンドリア図書館を取れていた場合)

  • 「陶器」、目標「兵法」
  • 「兵法」の開発に入ったら、目標を「共和制」に
  • 「共和制」の開発に入ったら、目標を「哲学」に
  • 「哲学」の開発に入ったら、目標を「一神教」に
  • 「一神教」の開発に入ったら、目標を「神学」に
  • 「神学」の開発に入ったら、目標を「鉄道」に
  • 「鉄道」の開発に入ったら、目標を「爆薬」に
  • 「爆薬」の開発に入ったら、目標を「小型化」に
  • 最後の方は欲しいもの優先で変更してもあまり大差ないかも

3.4 作るべき戦闘ユニット

  • 弓兵(兵舎を建ててから作成するとより有能なユニットに)
  • マスケット兵(兵舎が新しいタイプになるので立て直し必用)
  • 機械化歩兵(最強防御力地上ユニット、最後はこれがお勧め)
  • その他のユニットも作成可能になったら作っていこう!

3.5 防御(初期)

  • 初心者のころはCPUに攻められて負けることが多い、防御重要
  • 城壁を都市に作りましょう、弓兵がいて、城壁があれば、最初のうちは都市まず落ちない
  • 沿岸防衛も作れるようになったら、はやめに作りましょう、他の勢力の海軍が強くなる前に!

3.6 攻める時に便利なユニット(中盤、後半)

  • スパイ(「偵察」が必用お金がかかるが、損耗少なく都市をゲットできる、私はスパイができるまで基本他の都市攻めない)
  • 榴弾砲 (「ロボット工学」が必用 城壁無視で攻撃可能)

4 最初のお勧め操作手順

  • 文明→研究で研究タブを開いて、研究対象を「陶器」目標を「兵法」にセット
  • 周囲の地形を調べて、収入が多そうな所に都市を建築
  • 労働者は道を作り、次の都市の作成までの時間を短縮

5 世界の不思議の建築速度上昇作戦

  • 他の都市でユニットを作成し、世界の不思議を作成している都市に移動させて解散させると、ユニット作成コストの半分が不思議建築に利用可能
  • キャラバン、貨物輸送車なら、全コスト分世界の不思議建築に流用可能
  • お金をつかって買うを行い、数ターン完成をはやめれることも

6 世界の不思議概要

  • 早いもの勝ちなので、他の勢力より先に重要な世界の不思議を建築すべし

6.1 必ず取るべき最重要世界の不思議

  • アレクサンドリア図書館(「識字」まで研究が進むと建築可能になる)

6.2 不満を下げることができる重要な世界の不思議

  • この2つか、どちらか一つは必ずゲットしたい
    • J.S.バッハの大聖堂 (「神学」が必用)
    • ミケランジェロの協会 (「一神教」が必用)
  • 他にも取っておくと便利
    • シェークスピアの劇場 (効果は建てた都市のみ「医術」が必用)
  • 取れたら取る感じで
    • 空中庭園 (「陶器」が必用 アレクサンドリア図書館を優先すべき)
    • 癌の治療 (「遺伝子工学」が必用)

6.3 支出を抑えたり、収入を増やす効果のある世界の不思議

  • ピラミッド(食料の損失軽減「石工所」が必用)
  • リチャード一世の十字軍遠征 (生産ポイントアップ 「工学」が)必用)
  • フーバーダム (水力発電所がある状態に(「電子工学」が必用)
  • マゼランの航海 (水上ユニットの移動力+2 「航海術」が必用)

7 今後

  • 今後も文書追加していきます。

8 この文書のチェンジログ

  • 2020/01/06 初版

著者: NM Max

Created: 2020-01-06 月 09:07

Validate