tensorflow例(10)--モデル保存と読み取り,アヤメニューラルネットワークモデル読み書き


TensorFlowはtfを通過する.train.Saverクラスはモデルの保存と抽出を実現します.
ニューラルネットワークでモデルを訓練するのに非常に長い時間がかかり、このモデルを保存すると
このモデルをテストしたり使用したりする場合は、保存したモデルを抽出し、再訓練する必要はありません.
ニューラルネットワークの基本原理とtensorflowの実現について参考になる
機械学習(1)--ニューラルネットワークの初探査
TensorFlowの例(4)--MNISTの概要と手書きデジタル分類アルゴリズム
この例は2つのpyファイルに2つのコードに分けられ、1つはモデルのトレーニングと保存、1つはモデルのテストに使用されます.
データセットの使用概要:アヤメの特徴をデータとし、共有データセットには150個のデータセットが含まれています.
3種類のsetosa(山アヤメ)、versicolor(変色アヤメ)、virginica(バージニアアヤメ)に分けられます
クラスごとに50個のデータがあり、各データは4個の属性データと1個のカテゴリデータを含む.
この150個のデータセットを100個のトレーニングデータと50個のテストデータに分けて、それぞれ2つのファイルに置きます.
トレーニングPYTHONプログラムが実行されると、指定されたディレクトリの下にモデルファイルが生成され、テストPYTHONプログラムはモデルファイルを呼び出すだけでテストされます.
ニューラルネットワークの計算方式を採用しているのでsetosa(アヤメ)、versicolor(変色アヤメ)、virginica(バージニアアヤメ)のデータ型定義
setosa(アヤメ)[1,0,0],versicolor(変色アヤメ)[0,1,0],virginica(バージニアアヤメ)[0,0,1]
アヤメデータを適用する他の機械学習例を参照してください.
機械学習(6)--素朴ベイズモデルアルゴリズムのアヤメ花データ実験
機械学習(3.2)--PCA降維鳶尾花データ降維デモ
機械学習(2)--近接アルゴリズム(KNN)
コードセグメント1:
#-*- coding:utf-8 -*-
import numpy as np
import tensorflow as tf 
train = [['5.1', '3.5', '1.4', '0.2', 'Iris-setosa'], ['4.9', '3.0', '1.4', '0.2', 'Iris-setosa'], ['4.7', '3.2', '1.3', '0.2', 'Iris-setosa'], ['5.0', '3.6', '1.4', '0.2', 'Iris-setosa'], ['5.4', '3.9', '1.7', '0.4', 'Iris-setosa'], ['4.6', '3.4', '1.4', '0.3', 'Iris-setosa'], ['4.9', '3.1', '1.5', '0.1', 'Iris-setosa'], ['4.8', '3.0', '1.4', '0.1', 'Iris-setosa'], ['4.3', '3.0', '1.1', '0.1', 'Iris-setosa'], ['5.8', '4.0', '1.2', '0.2', 'Iris-setosa'], ['5.1', '3.5', '1.4', '0.3', 'Iris-setosa'], ['5.7', '3.8', '1.7', '0.3', 'Iris-setosa'], ['5.1', '3.8', '1.5', '0.3', 'Iris-setosa'], ['4.6', '3.6', '1.0', '0.2', 'Iris-setosa'], ['5.1', '3.3', '1.7', '0.5', 'Iris-setosa'], ['5.2', '3.5', '1.5', '0.2', 'Iris-setosa'], ['5.2', '3.4', '1.4', '0.2', 'Iris-setosa'], ['4.7', '3.2', '1.6', '0.2', 'Iris-setosa'], ['4.8', '3.1', '1.6', '0.2', 'Iris-setosa'], ['5.4', '3.4', '1.5', '0.4', 'Iris-setosa'], ['5.2', '4.1', '1.5', '0.1', 'Iris-setosa'], ['5.0', '3.2', '1.2', '0.2', 'Iris-setosa'], ['5.5', '3.5', '1.3', '0.2', 'Iris-setosa'], ['4.9', '3.1', '1.5', '0.1', 'Iris-setosa'], ['4.4', '3.0', '1.3', '0.2', 'Iris-setosa'], ['5.1', '3.4', '1.5', '0.2', 'Iris-setosa'], ['5.0', '3.5', '1.3', '0.3', 'Iris-setosa'], ['4.4', '3.2', '1.3', '0.2', 'Iris-setosa'], ['5.0', '3.5', '1.6', '0.6', 'Iris-setosa'], ['4.8', '3.0', '1.4', '0.3', 'Iris-setosa'], ['5.1', '3.8', '1.6', '0.2', 'Iris-setosa'], ['4.6', '3.2', '1.4', '0.2', 'Iris-setosa'], ['5.3', '3.7', '1.5', '0.2', 'Iris-setosa'], ['5.0', '3.3', '1.4', '0.2', 'Iris-setosa'], ['7.0', '3.2', '4.7', '1.4', 'Iris-versicolor'], ['6.4', '3.2', '4.5', '1.5', 'Iris-versicolor'], ['6.9', '3.1', '4.9', '1.5', 'Iris-versicolor'], ['5.5', '2.3', '4.0', '1.3', 'Iris-versicolor'], ['6.5', '2.8', '4.6', '1.5', 'Iris-versicolor'], ['5.7', '2.8', '4.5', '1.3', 'Iris-versicolor'], ['6.3', '3.3', '4.7', '1.6', 'Iris-versicolor'], ['4.9', '2.4', '3.3', '1.0', 'Iris-versicolor'], ['6.0', '2.2', '4.0', '1.0', 'Iris-versicolor'], ['6.1', '2.9', '4.7', '1.4', 'Iris-versicolor'], ['5.6', '2.9', '3.6', '1.3', 'Iris-versicolor'], ['6.7', '3.1', '4.4', '1.4', 'Iris-versicolor'], ['5.6', '3.0', '4.5', '1.5', 'Iris-versicolor'], ['5.9', '3.2', '4.8', '1.8', 'Iris-versicolor'], ['6.1', '2.8', '4.0', '1.3', 'Iris-versicolor'], ['6.3', '2.5', '4.9', '1.5', 'Iris-versicolor'], ['6.4', '2.9', '4.3', '1.3', 'Iris-versicolor'], ['6.6', '3.0', '4.4', '1.4', 'Iris-versicolor'], ['6.8', '2.8', '4.8', '1.4', 'Iris-versicolor'], ['6.7', '3.0', '5.0', '1.7', 'Iris-versicolor'], ['5.7', '2.6', '3.5', '1.0', 'Iris-versicolor'], ['5.5', '2.4', '3.7', '1.0', 'Iris-versicolor'], ['5.8', '2.7', '3.9', '1.2', 'Iris-versicolor'], ['5.4', '3.0', '4.5', '1.5', 'Iris-versicolor'], ['6.7', '3.1', '4.7', '1.5', 'Iris-versicolor'], ['6.3', '2.3', '4.4', '1.3', 'Iris-versicolor'], ['5.6', '3.0', '4.1', '1.3', 'Iris-versicolor'], ['5.5', '2.5', '4.0', '1.3', 'Iris-versicolor'], ['5.5', '2.6', '4.4', '1.2', 'Iris-versicolor'], ['6.1', '3.0', '4.6', '1.4', 'Iris-versicolor'], ['5.8', '2.6', '4.0', '1.2', 'Iris-versicolor'], ['5.0', '2.3', '3.3', '1.0', 'Iris-versicolor'], ['5.6', '2.7', '4.2', '1.3', 'Iris-versicolor'], ['5.7', '3.0', '4.2', '1.2', 'Iris-versicolor'], ['6.2', '2.9', '4.3', '1.3', 'Iris-versicolor'], ['5.1', '2.5', '3.0', '1.1', 'Iris-versicolor'], ['6.3', '3.3', '6.0', '2.5', 'Iris-virginica'], ['7.1', '3.0', '5.9', '2.1', 'Iris-virginica'], ['6.3', '2.9', '5.6', '1.8', 'Iris-virginica'], ['6.5', '3.0', '5.8', '2.2', 'Iris-virginica'], ['7.6', '3.0', '6.6', '2.1', 'Iris-virginica'], ['4.9', '2.5', '4.5', '1.7', 'Iris-virginica'], ['7.3', '2.9', '6.3', '1.8', 'Iris-virginica'], ['6.7', '2.5', '5.8', '1.8', 'Iris-virginica'], ['7.2', '3.6', '6.1', '2.5', 'Iris-virginica'], ['6.8', '3.0', '5.5', '2.1', 'Iris-virginica'], ['5.8', '2.8', '5.1', '2.4', 'Iris-virginica'], ['7.7', '3.8', '6.7', '2.2', 'Iris-virginica'], ['7.7', '2.6', '6.9', '2.3', 'Iris-virginica'], ['6.0', '2.2', '5.0', '1.5', 'Iris-virginica'], ['6.3', '2.7', '4.9', '1.8', 'Iris-virginica'], ['7.2', '3.2', '6.0', '1.8', 'Iris-virginica'], ['6.4', '2.8', '5.6', '2.1', 'Iris-virginica'], ['7.4', '2.8', '6.1', '1.9', 'Iris-virginica'], ['6.4', '2.8', '5.6', '2.2', 'Iris-virginica'], ['6.3', '2.8', '5.1', '1.5', 'Iris-virginica'], ['6.1', '2.6', '5.6', '1.4', 'Iris-virginica'], ['6.3', '3.4', '5.6', '2.4', 'Iris-virginica'], ['6.4', '3.1', '5.5', '1.8', 'Iris-virginica'], ['6.0', '3.0', '4.8', '1.8', 'Iris-virginica'], ['6.9', '3.1', '5.4', '2.1', 'Iris-virginica'], ['5.8', '2.7', '5.1', '1.9', 'Iris-virginica'], ['6.7', '3.3', '5.7', '2.5', 'Iris-virginica'], ['6.3', '2.5', '5.0', '1.9', 'Iris-virginica'], ['6.2', '3.4', '5.4', '2.3', 'Iris-virginica'], ['5.9', '3.0', '5.1', '1.8', 'Iris-virginica']]
data=train

'''    (   #---------------------     ),                    
            ,     
    1、 train  x_data,y_data   ,           ['5.1', '3.5', '1.4', '0.2', 'Iris-setosa']
        1.1 x_data ['5.1', '3.5', '1.4', '0.2']         
        1.2 y_data     ,setosa(   )[1,0,0],versicolor(    )[0,1,0],virginica(      )[0,0,1]
    2、tensorflow      
        2.1 w,b        weight biase
        2.2 x_pl,y_pl tensorflow         
        2.3 y    
'''

x_data = np.array([x[0:-1] for x in data]).astype(np.float32)
y_data= np.array([[1,0,0] if x[-1] == 'Iris-setosa' else  [0,1,0] if x[-1] == 'Iris-versicolor' else [0,0,1] for x in data]).astype(np.float32)

x_pl=tf.placeholder(tf.float32,[None,x_data.shape[1]],name='x_pl')
y_pl=tf.placeholder(tf.float32,[None,y_data.shape[1]],name='y_pl')

w=tf.Variable(tf.random_uniform([x_data.shape[1],y_data.shape[1]],0,1),'w')
b=tf.Variable(tf.random_uniform([y_data.shape[1]],0,1),'b')

y=tf.nn.softmax(tf.matmul(x_pl,w)+b)
#---------------------

#        ,        ,       ,           
loss=-tf.reduce_mean(y_pl*tf.log(y))
train=tf.train.GradientDescentOptimizer(0.005).minimize(loss)

sess=tf.Session()
sess.run(tf.global_variables_initializer())
for i in range(10000):
    sess.run(train,feed_dict={x_pl:x_data,y_pl:y_data})
    if i %1000 ==0 :print(i,sess.run(loss,feed_dict={x_pl:x_data,y_pl:y_data}))

saver=tf.train.Saver()
try:
    saver.save(sess,r'd:\tensorflowCkpt\Iris.ckpt') #                
    sess.close()
    print('      ')
except :
    print('      ,      ,      ')
    sess.close()

コードセグメント2
#-*- coding:utf-8 -*-  
import numpy as np
import tensorflow as tf 
test=[['4.6', '3.1', '1.5', '0.2', 'Iris-setosa'], ['5.0', '3.4', '1.5', '0.2', 'Iris-setosa'], ['4.4', '2.9', '1.4', '0.2', 'Iris-setosa'], ['5.4', '3.7', '1.5', '0.2', 'Iris-setosa'], ['4.8', '3.4', '1.6', '0.2', 'Iris-setosa'], ['5.7', '4.4', '1.5', '0.4', 'Iris-setosa'], ['5.4', '3.9', '1.3', '0.4', 'Iris-setosa'], ['5.4', '3.4', '1.7', '0.2', 'Iris-setosa'], ['5.1', '3.7', '1.5', '0.4', 'Iris-setosa'], ['4.8', '3.4', '1.9', '0.2', 'Iris-setosa'], ['5.0', '3.0', '1.6', '0.2', 'Iris-setosa'], ['5.0', '3.4', '1.6', '0.4', 'Iris-setosa'], ['5.5', '4.2', '1.4', '0.2', 'Iris-setosa'], ['4.9', '3.1', '1.5', '0.1', 'Iris-setosa'], ['4.5', '2.3', '1.3', '0.3', 'Iris-setosa'], ['5.1', '3.8', '1.9', '0.4', 'Iris-setosa'], ['6.6', '2.9', '4.6', '1.3', 'Iris-versicolor'], ['5.2', '2.7', '3.9', '1.4', 'Iris-versicolor'], ['5.0', '2.0', '3.5', '1.0', 'Iris-versicolor'], ['5.9', '3.0', '4.2', '1.5', 'Iris-versicolor'], ['5.8', '2.7', '4.1', '1.0', 'Iris-versicolor'], ['6.2', '2.2', '4.5', '1.5', 'Iris-versicolor'], ['5.6', '2.5', '3.9', '1.1', 'Iris-versicolor'], ['6.1', '2.8', '4.7', '1.2', 'Iris-versicolor'], ['6.0', '2.9', '4.5', '1.5', 'Iris-versicolor'], ['5.5', '2.4', '3.8', '1.1', 'Iris-versicolor'], ['6.0', '2.7', '5.1', '1.6', 'Iris-versicolor'], ['6.0', '3.4', '4.5', '1.6', 'Iris-versicolor'], ['5.7', '2.9', '4.2', '1.3', 'Iris-versicolor'], ['5.7', '2.8', '4.1', '1.3', 'Iris-versicolor'], ['5.8', '2.7', '5.1', '1.9', 'Iris-virginica'], ['6.5', '3.2', '5.1', '2.0', 'Iris-virginica'], ['6.4', '2.7', '5.3', '1.9', 'Iris-virginica'], ['5.7', '2.5', '5.0', '2.0', 'Iris-virginica'], ['6.4', '3.2', '5.3', '2.3', 'Iris-virginica'], ['6.5', '3.0', '5.5', '1.8', 'Iris-virginica'], ['6.9', '3.2', '5.7', '2.3', 'Iris-virginica'], ['5.6', '2.8', '4.9', '2.0', 'Iris-virginica'], ['7.7', '2.8', '6.7', '2.0', 'Iris-virginica'], ['6.7', '3.3', '5.7', '2.1', 'Iris-virginica'], ['6.2', '2.8', '4.8', '1.8', 'Iris-virginica'], ['6.1', '3.0', '4.9', '1.8', 'Iris-virginica'], ['7.2', '3.0', '5.8', '1.6', 'Iris-virginica'], ['7.9', '3.8', '6.4', '2.0', 'Iris-virginica'], ['7.7', '3.0', '6.1', '2.3', 'Iris-virginica'], ['6.7', '3.1', '5.6', '2.4', 'Iris-virginica'], ['6.9', '3.1', '5.1', '2.3', 'Iris-virginica'], ['6.8', '3.2', '5.9', '2.3', 'Iris-virginica'], ['6.7', '3.0', '5.2', '2.3', 'Iris-virginica'], ['6.5', '3.0', '5.2', '2.0', 'Iris-virginica']]
data=test


'''    (   #---------------------     ),                    
            ,     
    1、 train  x_data,y_data   ,           ['5.1', '3.5', '1.4', '0.2', 'Iris-setosa']
        1.1 x_data ['5.1', '3.5', '1.4', '0.2']         
        1.2 y_data     ,setosa(   )[1,0,0],versicolor(    )[0,1,0],virginica(      )[0,0,1]
    2、tensorflow      
        2.1 w,b        weight biase
        2.2 x_pl,y_pl tensorflow         
        2.3 y    
'''
x_data = np.array([x[0:-1] for x in data]).astype(np.float32)
y_data= np.array([[1,0,0] if x[-1] == 'Iris-setosa' else  [0,1,0] if x[-1] == 'Iris-versicolor' else [0,0,1] for x in data]).astype(np.float32)

x_pl=tf.placeholder(tf.float32,[None,x_data.shape[1]],name='x_pl')
y_pl=tf.placeholder(tf.float32,[None,y_data.shape[1]],name='y_pl')

w=tf.Variable(tf.random_uniform([x_data.shape[1],y_data.shape[1]],0,1),'w')
b=tf.Variable(tf.random_uniform([y_data.shape[1]],0,1),'b')

y=tf.nn.softmax(tf.matmul(x_pl,w)+b)
#---------------------

sess=tf.Session()
sess.run(tf.global_variables_initializer())
isRestore = True
saver=tf.train.Saver()
try:
    saver.restore(sess,r'd:\tensorflowCkpt\Iris.ckpt') #                
except :
    print('      ,         !')
    isRestore=False
if isRestore:
	print("     : "+str(round((sess.run(tf.reduce_mean(tf.cast(tf.equal(tf.argmax(y_data,axis=1),tf.argmax(sess.run(y,feed_dict={x_pl:x_data}),axis=1)),tf.float32))))*100,2)) + "%")
sess.close()