2021-10-29 Tensorflow 2 Tensorflow モデルの確立とトレーニング - 多層パーセプトロン MLP

Fashion-MNIST データセットについて

Zalando は、 MNISTデータ セットを Fashion-MNISTデータ セットに置き換え、機械学習データ セットとして Fashion-MINST を使用しました。
Fashion-MNIST データ セットは、衣類、靴、バッグの合計 70,000 枚の写真で構成されており、各写真のピクセル サイズは 28x28 で、グレースケールで表示されます。そのうち、60,000 枚の画像がトレーニングに使用され、10,000 枚の画像がテストに使用されます。
ファッション データ セットは 10 のカテゴリに分類でき、中国語では次のように表されます。
class_name = ["T シャツ"、"パンツ"、"パーカー"、"ドレス"、"コート"、"サンダル"、"シャツ"、 「スニーカー」「バッグ」「ブーツ」】

ファッションデータセットをロードする

このアプリケーションで使用されている Tensorflow のバージョンは 2.3.0 です。

  • 必要なライブラリをインポートします
    import tensorflow as tf
    import numpy as np
    from tensorflow.keras.layers import Dense, Flatten
    from tensorflow.keras import Model
    import matplotlib.pyplot as plt
  • データセットをロードします #
    トレーニング用の入力特徴とラベルを読み取ります
    ファッション = tf.keras.datasets.fashion_mnist
    (x_train, y_train), (x_test, y_test) = ファッション.load_data()
    説明:
    x_train: 特徴データトレーニングセットのロードを示します。つまり、60,000 枚の画像トレーニング セット
    y_train: 画像分類に対応するラベル トレーニング セットを表します。
    x_test: ロードされた特徴データ テスト セット、つまり 10,000 枚の画像を含むテスト セットを表します。 y_test
    : 画像に対応するラベル トレーニング セットを表します。分類
    #入力特徴分類1を実現するため、値は[0, 1]となり、計算量が軽減されますピクチャはデフォルトで0~255の数値になり、ニューラルネットワークがx_train、x_testを吸収しやすくなり
    ます= x_train/255.0, x_test/255.0
    class_name = ["T シャツ ","パンツ","パーカー","ドレス","コート","サンダル","シャツ","スニーカー","バッグ","ブーツ"]

ニューラルネットワークを構築する

ニューラルネットワーククラスを定義する

tf.keras.Model のサブクラスであるニューラル ネットワーク モデル クラス FashionModel を定義します。

class FashionModel(Model):
   # 定义网络结构
	def __init__(self):
    	super(FashionModel, self).__init__()
    	#将数据拉直 [28,28]->[784,1]
   		self.flatten = Flatten()
    	#指定激活函数
    	self.d1 = Dense(128, activation="relu") 
    	#指定激活函数,设置为[0,1]之间的数字
    	self.d2 = Dense(10, activation="softmax")
	def call(self, inputs, training=None, mask=None):
    	x = self.flatten(inputs)
    	x = self.d1(x)
    	y = self.d2(x)
   		return y

上記のネットワークは、フラット化層、全結合層 d1、第 2 全結合層 d2 の 3 層に分かれています。

ニューラル ネットワークを定義して呼び出し、トレーニング セットとテスト セットをパラメーターとして渡します。

def generate_nn(x_train,y_train,x_test,y_test):
	# 声明神经网络对象
 	model = FashionModel()
	# 配置训练方法(优化器,损失函数,评测指标)
	model.compile(optimizer=tf.keras.optimizers.Adam(),
              	  loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              	  metrics=[tf.keras.metrics.sparse_categorical_accuracy])
# 执行训练过程
	model.fit(x_train, y_train,
              batch_size=32, epochs=10,
              validation_data=(x_test, y_test),
              validation_freq=1)
# 打印网络结构和参数
	model.summary()
	return model

画像表示処理

def show_image(img_arr):
	"""
	显示图片
	Parameters
	----------
	img_arr : numpy.ndarray
     表示图片
	"""
	plt.imshow(img_arr,cmap="binary")
	plt.show()

10枚の写真の分類を予測します

画像の場所:
画像の拡張子はjpegです
ここに画像の説明を挿入します

#创建模型
model = generate_nn(x_train,y_train,x_test,y_test)
#定义图片的存储位置
path = "./test_data/exam_fashion/exam_fashion/"
#图片的文件名,形如1.jpeg
images = ["%d.jpeg"%i for i in range(0,10)]
#生成28x28的图片数组
matrix = np.full(784,255.0).reshape(28,28)
images_data=[]
for imgfile in images:
    #设置要访问的图片文件名
	img_name = "%s%s"%(path,imgfile)
	#加载图片
	img = tf.keras.preprocessing.image.load_img(img_name,color_mode="grayscale",target_size=(28,28))
	img_data = tf.keras.preprocessing.image.img_to_array(img)   #将图片数据转换成numpy数组
	img_data = matrix-img_data.reshape(28,28)                             #图片反相处理,黑变白,白变黑,将数组设置为28x28 
	show_image(img_data)                                                              #显示图片
	images_data.append(img_data)
	
def main():
	images_data = np.array(images_data)
	y_pred = model.predict(images_data)                                            #预测的结果
	index = np.argmax(y_pred,axis=1)                                                 #获取预测的结果,返回二位数组的	列坐标对应的分类
	for i in index:                                                                                   #显示最后的结果 
   		 print(i,class_name[i])             
   		                            
if __name__=="__main__":
	main()                         

テスト結果:
6 シャツ
1 パンツ
4 ジャケット
3 ドレス
4 ジャケット
5 サンダル
0 T シャツ
7 スニーカー
8 バッグ
9 ブーツ

おすすめ

転載: blog.csdn.net/userhu2012/article/details/121041107