学びながら書いた人工知能チュートリアル(二)


前回は「少なくとも運行できる」ものを作りましたが、小さな問題があります.mnistはどこですか.あるいは、自分で写真を探して訓練することができますか?(といっても28×28白黒チャネルのみの図は多くない)
——もちろんいいです.当然です.そして、猫を作るのに使うコードも猫に与えるコードも何も変わらないと想像できますが...実は飼料も変わらないのですが、原料が変わって(mnistから自分の図集に)、必要な道具も微調整されています...
飼料を作る段階でどんな飼料が作られたのかを振り返ってみましょう
  • X_train(訓練用図)
  • y_train(訓練図対応数字)
  • X_test(試験用図)
  • y_test(テスト用数字)
  • (num_classesはコード設計が悪いため、以下では1回しか使われず、y_testの関数であり、完全に削除でき、以下の出現の代わりに等号右側を用いる)
    手間を省くために、直接トレーニングセットをテストセットにして、猫に餌をやるときに同じものを使えばいいのです.とにかく【エサは4個】.私は簡単にするために、後の2つは前の2つを使いました......また、他の人のコードに基づいて、名前を変更しました.以下のようにします.
    (出典:csdnブログ)
  • data
  • label
  • data
  • label

  • 原料については、もちろんmnistの行を取り除くことができますが、os(システムライブラリ)とPIL(よく使われる画像ライブラリ)が必要です.osはpythonが持参したもので、PILはpip install pillowでインストールできます(なぜpillow?^^)、また便宜上import numpyをimport numpy as npに変更し、npはnumpyの最も一般的な別名です————いいでしょう.そしてこのように飼料を作ります:(pythonベースの人は私がくだらないと思っているかもしれませんが......)
    △また、自分でmnistを探してダウンロードします.一般的には圧縮パッケージで、解凍後は画像フォルダです.
    ###     
    def load_data():
    	path = "C:/Users/Administrator/Desktop/n/"    #       
    	name_lst = os.listdir(path)		#           
    	lenth = len(name_lst)			#       
    	
    	data = np.empty((lenth,28,28,1),dtype="float32")	#       (data 4   ,label 1 )
    	label = np.empty((lenth,),dtype="uint8")
    
    	for i in range(lenth):            #                 
    	                #   :28×28px    ,      n,    “n.”  ,    0       0.123.jpg
    		s_name = name_lst[i]
    		l_name = path + s_name
    		img = PIL.Image.open(l_name)
    		arr = np.asarray(img,dtype="float32")
    		data[i,:,:,0] = arr/255
    		n = int(s_name.split('.')[0])
    		label[i] = n
    		
    	label = np_utils.to_categorical(label)    # (  ,        )
    	
    	return data,label		
    data, label = load_data()
    
    X_train = data
    y_train = label
    X_test = data
    y_test = label

    初心者が分からないように、ここには完全なコードも置いておきます.
    ###     !
    import numpy as np
    import os, PIL
    
    from keras.models import Sequential
    from keras.layers import Dense
    from keras.layers import Dropout
    from keras.layers import Flatten
    from keras.layers.convolutional import Conv2D
    from keras.layers.convolutional import MaxPooling2D
    from keras.utils import np_utils
    #         seed,seed          
            
            
    ###     !
    def load_data():
    	path = "C:/Users/Administrator/Desktop/n/"
    	name_lst = os.listdir(path)		#           
    	lenth = len(name_lst)			#       
    	
    	data = np.empty((lenth,28,28,1),dtype="float32")	
    	label = np.empty((lenth,),dtype="uint8")
    
    	for i in range(lenth):
    		s_name = name_lst[i]
    		l_name = path + s_name
    		img = PIL.Image.open(l_name)
    		arr = np.asarray(img,dtype="float32")
    		data[i,:,:,0] = arr/255
    		n = int(s_name.split('.')[0])
    		label[i] = n
    		
    	label = np_utils.to_categorical(label)
    	
    	return data,label		
    data, label = load_data()
    
    X_train = data
    y_train = label
    X_test = data
    y_test = label
    
            
    #    
    def baseline_model():
     
        model = Sequential()
     
        model.add(Conv2D(32, (3, 3), padding='valid', input_shape=(28, 28,1), activation='relu'))
        model.add(MaxPooling2D(pool_size=(2, 2)))
    
     
        model.add(Conv2D(15, (3, 3), padding='valid' ,activation='relu'))
        model.add(MaxPooling2D(pool_size=(2, 2)))
    
     
        model.add(Flatten())
    
    
        model.add(Dense(128, activation='relu'))
        model.add(Dense(y_test.shape[1], activation='softmax'))
    
     
        model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
        return model
     
    model = baseline_model()
    
            
    ###   
     
    model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=15, batch_size=128, verbose=2)

    もしあなたの猫が他のチュートリアルと違うことに気づいたら、おかしくないでください.猫は自然にいろいろです.
    (2018-2-7地球にて)