Umidigi F1 Play充電できない不具合発生

Umidigi F1 Play非常にコスパの良いスマホとして購入したのですが

1年たたずに、充電が接触不良っぽい不具合にて、充電になりにくくなってしまい

接点回復剤

ネットで検索した端子部のはんだ付け再確認を行ったが(はんだごてで再度ハンダ溶かしてみた、半田追加は怖いからおこなわず)復活せず

しょうがないので、今日、Googleが特売しているPixcel3a XLを購入した

届くのは5/4らしいかなり先

もちょっと待って、Pixcel3aにしとけば良かった。

結局高くつくことに

5Gに移行は、かなり先にすることにした

追記)2020/8  アリババの国際バージョンのショップに、F1Play用の充電基盤があったので、購入して交換したら、復活した。コロナ騒ぎもあったため、注文してから届くまで1ヶ月以上かかった。予備も含めて2個購入して、ギフト券割引で1000から2000の間の金額だったと思う。

分解に特殊なネジが必要なのだが、0.9mmのマイナスドライバーでも開けることが可能だった

外したネジの保管には気をつけましょう、私は特殊ネジの1つを紛失してしまった。

easyAI入門

easyAI入門

1 概要

  • Negamax(αβ法の一種 αβ法はMINMAX法(全手検索)と同じ結果を少ない探索で可能なアルゴリズム)のフレームワーク
  • Pythonベース
  • MITライセンス

2 リンク

3 easyAIのインストール

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


3.2 easyAIのインストール 手順

3.2.1 イメージ起動

docker run -it --rm -v $(realpath ~/notebooks):/tf/notebooks -p 8888:8888 mytensorflow

3.2.2 シェル起動

  • New から terminalを選択して、ターミナル起動

3.2.3 シェルで以下のコマンドを実行

sudo su - user
cd /tf/notebooks/

3.2.4 easyAIのインストール

sudo pip3 install easyAI

3.2.5 easyAIのgithubのダウンロード

mkdir easyAI
cd easyAI
git clone https://github.com/Zulko/easyAI.git

3.2.6 easyAIのサンプルプログラムを動かしてみる

python3 easyAI/games/GameOfBones.py

3.3 この章のまとめ

  • easyAIをダウンロードし動かしてみた

4 コネクトX(Xは数字)を作って動かしてみる

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


4.2 コネクト4を作って動かしてみる の手順

4.2.1 イメージ起動

docker run -it --rm -v $(realpath ~/notebooks):/tf/notebooks -p 8888:8888 mytensorflow

4.2.2 シェル起動

  • New から terminalを選択して、ターミナル起動

4.2.3 シェルで以下のコマンドを実行

sudo su - user
cd /tf/notebooks/

4.2.4 easyAIのインストール

  • 起動しなおす毎に消えてるので、再度インストール
sudo pip3 install easyAI

4.2.5 コネクトX用のディレクトリ掘り、ファイルを作成

mkdir -p easyAI/Connectx
cd  easyAI/Connectx

4.2.6 Connectx.pyファイルを以下の内容で作成

  • ホスト側だとホームディレクトリのnotebooks/easyAI/Connectxディレクトリに以下の内容で作成
  • Connect X の処理を行うクラス
  • BWIDTHで盤の幅
  • BHEIGHTで盤の高さ
  • NEEDLENで勝利条件の長さ(4なら4個以上同じ陣営のコマを縦横あるいは斜めに連続で並べたら勝ち)
BWIDTH=7                    # board width
BHEIGHT=6                   # board height
NEEDLEN=4                    # How many must be arranged to win

class Connectx(object):

    def __init__(self):
	self.color=[[2] * BWIDTH for i in range(BHEIGHT)]
	self.v=[" O "," X "," . "]
	self.turn=0
	self.history=[]
	self.isEnd=False
	self.winner=2

    def clear(self, stone=True):
	self.color=[[2] * BWIDTH for i in range(BHEIGHT)]
	self.turn=0
	self.history.clear()
	self.isEnd=False
	self.winner=2

    def showboard(self):
	print("     ",end="")
	for x in range(BWIDTH):
	    print("{0:2d}".format(x),end=" ")
	print()
	for y in range(BHEIGHT):
	    print("{0:2d}".format(y)+" | ",end="")
	    for x in range(BWIDTH):
		c=self.color[y][x]
		print(self.v[c] ,end="")  
	    print(" | "+"{0:2d}".format(y))
	print("     ",end="")
	for x in range(BWIDTH):
	    print("{0:2d}".format(x),end=" ")
	print()
	print("isEnd : "+str(self.isEnd))
	if self.isEnd:
	    print("game is over winner is "+str(self.winner))
	print(self.history)
	print()

    def legal(self, v):
	ans=False
	if self.color[0][v]==2:
	    ans=True
	return ans

    def isValidXY(self ,xy):
	v,y=xy
	return (v>=0 and v<BWIDTH and y>=0 and y<BHEIGHT)

    def getColor(self,xy):
	ans=3
	if self.isValidXY(xy):
	    v,y=xy
	    ans=self.color[y][v]
	return ans

    def check(self):
	ans=False
	for x in range(BWIDTH):
	    if ans:
		break
	    for y in reversed(range(BHEIGHT)):
		if ans:
		    break
		c=self.color[y][x]
		if c<2:
		    #print(">>>***************",end="")
		    #print((x,y))
		    if self.bcheck((x,y)):
			ans=True
			break
	return ans

    def bcheck(self,xy):
	x,y=xy
	ans=False
	c=self.color[y][x]
	if c<2:
	    for dx in [1,0,-1]:
		for dy in [1,0,-1]:
		    #print("*****(dx,dy)",end=" ")
		    #print((dx,dy))
		    if (not (dx==0 and dy==0))  and (not ans):
			c1=1
			for i in range(1,NEEDLEN):
			    nx=x+dx*i
			    ny=y+dy*i
			    #print("(nx,ny)",end=" ")
			    #print((nx,ny))
			    if self.isValidXY((nx,ny)):
				nc=self.getColor((nx,ny))
				if nc==c:
				    #print((nx,ny),end=" ")
				    c1+=1
				    #print(c1)
				    if c1>=NEEDLEN:
					#print("*** TRUE")
					ans=True
					break
			    else:
				break
	return ans

    def getEnableVs(self):
	ans=[]
	for i in range(BWIDTH):
	    if self.color[0][i]==2:
		ans.append(i)
	return ans

    def checkEnd(self):
	evs=self.getEnableVs()
	ans=len(evs)>0 or self.isEnd
	if ans:
	    self.isEnd=True
	return ans

    def play(self,v):
	ans=False
	if self.legal(v):
	    ans=True
	    for y in reversed(range(BHEIGHT)):
		if self.color[y][v]==2:
		    self.color[y][v]=self.turn
		    self.history.append([v,y])
		    #print(self.check())
		    if not self.isEnd:
			if self.check():
			    self.isEnd=True
			    self.winner=self.turn
			    # print("game is over winner is "+str(self.winner))
			    # print(self.history)
		    self.turn=int(self.turn==0)
		    break
	return ans

    def unmake_move(self, move): # optional method (speeds up the AI)
	if len(self.history)>0:
	    x,y=self.history[-1]
	    self.color[y][x]=2
	    #for i in range(BHEIGHT):
	    #    if self.color[y][i]<2:
	    #        self.color[y][i]=2
	    #        break
	    self.history=self.history[:-1]
	    self.turn=int(self.turn==0)
	    self.isEnd=False
	    self.winner=2

4.2.7 ConnectxEasyAI.py ファイルを以下の内容で作成

  • easyAI用
  • ホスト側だとホームディレクトリのnotebooks/easyAI/Connectxディレクトリに以下の内容で作成
from easyAI import TwoPlayersGame
from easyAI.Player import Human_Player
from Connectx import *

class ConnectxEasyAI( TwoPlayersGame ):
    def __init__(self, players):
	self.board=Connectx()
	self.players = players
	self.nplayer = 1

    def possible_moves(self):
	return self.board.getEnableVs()

    def make_move(self, move):
	self.board.play(move)

    def unmake_move(self, move): # optional method (speeds up the AI)
	self.board.unmake_move(move)

    def lose(self):
	ans=self.board.check()
	enemy=int(self.board.turn==0)
	return self.board.winner==enemy

    def is_over(self):
	self.board.check()
	return self.board.isEnd;

    def show(self):
	self.board.showboard()

    def scoring(self):
	return -100 if self.lose() else 0

if __name__ == "__main__":

    from easyAI import AI_Player, Negamax
    ai_algo = Negamax(6)
    ConnectxEasyAI( [Human_Player(),AI_Player(ai_algo)]).play()

4.2.8 ConnectxEasyAI1.py ファイルを以下の内容で作成

  • 先手人間、後手AI(読み深さ6)戦用
  • ホスト側だとホームディレクトリのnotebooks/easyAI/Connectxディレクトリに以下の内容で作成
from easyAI import TwoPlayersGame
from easyAI.Player import Human_Player
from Connectx import *
from ConnectxEasyAI import ConnectxEasyAI


if __name__ == "__main__":

    from easyAI import AI_Player, Negamax
    ai_algo = Negamax(6)
    ConnectxEasyAI( [Human_Player(),AI_Player(ai_algo)]).play()

4.2.9 ConnectxEasyAI2.py ファイルを以下の内容で作成

  • 総当りで調べる用(私のマシンで半日動かしたが、8->12手までしか探索できず。時間をかければ先手必勝の結果が得られると思われる)
  • ホスト側だとホームディレクトリのnotebooks/easyAI/Connectxディレクトリに以下の内容で作成
from easyAI import TwoPlayersGame
from easyAI.Player import Human_Player
from Connectx import *
from ConnectxEasyAI import ConnectxEasyAI


if __name__ == "__main__":

    from easyAI import id_solve, Human_Player, AI_Player
    from easyAI.AI import TT

    #r, d, m = id_solve(ConnectxEasyAI, range(NEEDLEN*2, BWIDTH*BHEIGHT+1), win_score = 100)
    #r, d, m = id_solve(ConnectxEasyAI, range(13, BWIDTH*BHEIGHT+1,2), win_score = 100)
    r, d, m = id_solve(ConnectxEasyAI, range(13, BWIDTH*BHEIGHT+1), win_score = 100)
    print(r, d, m)  # see the docs.

4.2.10 ConnectxEasyAI3.py ファイルを以下の内容で作成

  • 対人対人戦用
  • ホスト側だとホームディレクトリのnotebooks/easyAI/Connectxディレクトリに以下の内容で作成
from easyAI import TwoPlayersGame
from easyAI.Player import Human_Player
from Connectx import *
from ConnectxEasyAI import ConnectxEasyAI

if __name__ == "__main__":

    from easyAI import AI_Player, Negamax
    ai_algo = Negamax(6)
    #ConnectxEasyAI( [Human_Player(),AI_Player(ai_algo)]).play()
    ConnectxEasyAI( [Human_Player(),Human_Player()]).play()

4.2.11 対AI戦を行ってみる

  • 以下のコマンドを(docker内)ターミナルで実行
python3 ConnectxEasyAI1.py 

4.2.12 人対人戦を行ってみる

  • 以下のコマンドを(docker内)ターミナルで実行
python3 ConnectxEasyAI3.py 

4.2.13 人対人戦を行ってみる

  • 探索を行ってみる(時間かかりすぎるので、最後まで未調査、調査した方いたら結果を教えてもらえると嬉しい)
  • 半日やって8から12まで終わり、13手の処理中でした
python3 ConnectxEasyAI2.py 

4.3 この章のまとめ

  • easyAIをダウンロードし動かしてみた

5 今後

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

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

  • 2020/04/02 初版

著者: NM Max

Created: 2020-04-04 土 20:52

Validate

機械学習ライブラリ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

引っ越ししてきたよ(ブログの引っ越し)

前はxserverさんの無料サイトでブログ開始したんだけど、sslを利用するとChromeが文句言いまくりになるので、引っ越したいと思ってました。

価格をちょっとググると結構高いので躊躇してましたが。持ってたドメインのサイトからたどるとメッチャ安いサーバーあるので、引っ越しすることにしました。

現在は30日の無料お試し期間で、今の所気になってた、sslも関係なくなって、容量も多いので、今までは画像をアップするのもためらってましたが、これで気をつかわずにブログ出来そう。

チャキチャキ引っ越して本当に良かったよ!

引越し先を色々調べてみたら、結構安いねレンタルサーバー

一般家庭で、ノートタイプのマシンを1ヶ月サーバーとして利用したら、多分、数千円単位で電気代が増えると思うんだけど、色々調べたら、一月200円くらい、年間2000円とか、3000円程度でレンラタルサーバーをかりれて、sslも独自ドメインで可能らしい。

その程度の安い金額なら、引越しした方が良い気が

今は容量気にして、画像もアップ躊躇してるから

1週間以内には引越ししようと思います。

ブログ開いたところだけど引っ越しするかも

今はxserverさんの無料レンタルスペースを使わせていただいているんだけど、無料sslだとブログを開こうとすると警告がでて、これじゃ人に来てもらえない。

今朝https->httpに変更して、それなら大丈夫なんだけど、どうもhttpsの方がGoogleさん好きらしいので、ブラウザで開いたときに警告でないsslが使えるレンタルサーバーが安くであるなら、そこに引っ越そうかと、早速だけど

ロリポップさんが500円/月らしくて、xserverさんは月1000円のコース。もっと安いとこないか探して、いきなりだけど引っ越ししちゃうかも

QEMUにUbuntu18.04.1をインストールする手順の動画を作ろうと思ってます。

Youtubeとブログを毎日更新しようとしてましたが、早速ブログは投稿できず、Youtubeはまだ再開できていません。

最近やった作業で、Youtubeでアップしても良い気がするものとして、QEMU(仮想マシン)にUbuntu18.04.1をインストールする作業とか、作った後で、ディスクの容量を変化させる作業をしたので、それを動画にしようかと思ってます。

カーネルモジュールを使うと、相当サクサク動くようになっていて、ノーマルよりは遅いんだけど、QEMUめっちゃ使い心地改善されてました。久しぶりに使ってみたんだけど

動画をYoutubeにアップできたら、手順と動画へのリンクを追加しますね!