Classement de l'image tensorflow2.0 de combat --- mode-mnist classement des jeux de données

En fait, l'idée d'écrire ce blog est principalement décrit une partie de tf2.0 utilisation de api commun et comment construire rapidement et facilement un réseau de neurones en utilisant les tf.keras

1. Tout d'abord parler tf.keras, avec laquelle nous pouvons facilement les modèles de réseau de construction qu'ils veulent construire, se battre comme des blocs de construction, couche par couche pile réseau vers le haut. Mais au plus profond réseau de gradient disparaîtra et ainsi de suite, si juste être en mesure de construire un modèle de réseau aux résultats du modèle ont également besoin des connaissances d'autres façons d'optimiser.

Pour introduire des ensembles de données mode-mnist peuvent jeter un oeil sur les liens ci - dessous
décrit la mode sur Github-mnist

2. Ensuite, parler de la classification générale couramment utilisée pour l'optimisation d'image

  • 1. La normalisation des données d'image (normalisation): accélérer la convergence des réseaux, des principes spécifiques peut imaginer dans un gradient concentrique le long de la plus rapide pour atteindre le centre sans portée graphique formelle du centre sera rebondissements le long du gradient
    Insérer ici l'image Description
  • 2. améliorations de fonctionnalités de données: Liens
  • 3. Paramètres de recherche super réseau: obtenir les meilleurs paramètres du modèle, principalement la recherche de la grille, recherche aléatoire, algorithmes génétiques, recherche heuristique
  • Demande 4.dropout, earlystopping, la régularisation et d'autres méthodes: par l'ajout d'une couche d'oubli, la régularisation et au début de butée pour empêcher modèle ajusté sur

3. La section de code de mise en œuvre et les résultats

#先导入一些常用库,后续用到再增加
import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow import keras
import sklearn
import os
import sys

#看一下版本,确认是2.0
print(tf.__version__)

Insérer ici l'image Description

#使用keras自带的模块导入数据,并且切分训练集、验证集、测试集,对训练数据进行标准化处理
fashion_mnist=keras.datasets.fashion_mnist
(x_train_all,y_train_all),(x_test,y_test)=fashion_mnist.load_data()
print(x_train_all.shape)
print(y_train_all.shape)
print(x_test.shape)
print(y_test.shape)

#切分训练集和验证集
x_train,x_valid=x_train_all[5000:],x_train_all[:5000]
y_train,y_valid=y_train_all[5000:],y_train_all[:5000]

print(x_train.shape)
print(y_train.shape)
print(x_valid.shape)
print(y_valid.shape)


#标准化
from sklearn.preprocessing import StandardScaler

scaler=StandardScaler()
x_train_scaled=scaler.fit_transform(x_train.astype(np.float32).reshape(-1,1)).reshape(-1,28,28)
x_valid_scaled=scaler.fit_transform(x_valid.astype(np.float32).reshape(-1,1)).reshape(-1,28,28)
x_test_scaled=scaler.fit_transform(x_test.astype(np.float32).reshape(-1,1)).reshape(-1,28,28)
#可视化一下图片以及对应的标签
#展示多张图片
def show_imgs(n_rows,n_cols,x_data,y_data,class_names):
    assert len(x_data)==len(y_data)#判断输入数据的信息是否对应一致
    assert n_rows*n_cols<=len(x_data)#保证不会出现数据量不够
    plt.figure(figsize=(n_cols*2,n_rows*1.6))
    for row in range(n_rows):
        for col in range(n_cols):
            index=n_cols*row+col   #得到当前展示图片的下标
            plt.subplot(n_rows,n_cols,index+1)
            plt.imshow(x_data[index],cmap="binary",interpolation="nearest")
            plt.axis("off")
            plt.title(class_names[y_data[index]])
    plt.show()
    
class_names=['t-shirt', 'trouser', 'pullover', 'dress', 'coat', 'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']
show_imgs(5,5,x_train,y_train,class_names)

Insérer ici l'image Description

#搭建网络模型

model=keras.models.Sequential()
model.add(keras.layers.Flatten(input_shape=[28,28]))
model.add(keras.layers.Dense(300,activation="relu"))
model.add(keras.layers.Dense(100,activation="relu"))
model.add(keras.layers.Dense(10,activation="softmax"))
model.compile(loss="sparse_categorical_crossentropy",optimizer="adam",metrics=["acc"])
model.summary()

Insérer ici l'image Description
Ici params informations sur le réseau numérique , comment faire?
W = Y X + b et selon les règles de la multiplication de la matrice (None, 784) à (None, 300) est une matrice intermédiaire (784 300) et l'amplitude du terme de biais b est 300, de sorte que 784 300 + 300 = 235500, c'est un petit détail juste mentionner.

#训练,并且保存最好的模型、训练的记录以及使用早停防止过拟合
import datetime
current_time = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
logdir = os.path.join('logs', current_time)
output_model=os.path.join(logdir,"fashionmnist_model.h5")
callbacks=[
    keras.callbacks.TensorBoard(log_dir=logdir),
    keras.callbacks.ModelCheckpoint(output_model,save_best_only=True),
    keras.callbacks.EarlyStopping(patience=5,min_delta=1e-3)
          ]


history=model.fit(x_train_scaled,y_train,epochs=30,validation_data=(x_valid_scaled,y_valid),callbacks=callbacks)

Insérer ici l'image Description
Avant que je possédais un dossier nommé en utilisant TensorBoard et exécuter ModelCheckpoint à tort, j'ai trouvé un peu comme un bug sur les fenêtres, au- dessus qui est une solution, puis ouvrez look tensorboard.
Insérer ici l'image Description
Insérer ici l'image Description
Le meilleur modèle est également enregistré en tant que fichier h5, appel facile

def plot_learning_curves(history):
    pd.DataFrame(history.history).plot(figsize=(8,5))
    plt.grid()
    plt.gca().set_ylim(0,1)
    plt.show()

plot_learning_curves(history)

C'est un moment d'établir leurs propres changements dans la formation, et presque au-dessus de
Insérer ici l'image Description

#最后在测试集上的准确率
loss,acc=model.evaluate(x_test_scaled,y_test,verbose=0)
print("在测试集上的损失为:",loss)
print("在测试集上的准确率为:",acc)

Insérer ici l'image Description

#得到测试集上的预测标签,可视化和真实标签的区别
y_pred=model.predict(x_test_scaled)
predict = np.argmax(y_pred,axis=1) 

show_imgs(3,5,x_test,predict,class_names)
show_imgs(3,5,x_test,y_test,class_names)

Les résultats prévus des
Insérer ici l'image Description
résultats concrets
Insérer ici l'image Description

4. Résumé:

Lisez l'exemple ci-dessus, l'utilisation de tf.keras modèle de construction est écrit

model=keras.models.Sequential()
model.add(...)
model.add(...)
...
model.compile(...)
model.fit(...)

#当然也可以写成
model=keras.models.Sequential([
	...
	...
	...
])
#这两者差别不大


#还有函数式的写法
inputs=...
hidden1=...(inputs)
....
#子类的写法
class ...:
	...

Mais pour les paramètres du modèle, tels que la sélection ( « sparse_categorical_crossentropy » et « categorical_crossentropy » ou « binary_crossentropy ») fonction de la perte de ce genre de perte quand vous avez besoin d'utiliser la fonction la plus appropriée, sélectionnez la fonction d'activation de chaque couche du réseau, l'optimiseur choix ...... besoin de comprendre le sens de ce qui peut être utilisé dans des circonstances appropriées, je ne donne pas d'exemples utiliser la recherche de super paramètres ici les paramètres du modèle optimaux, le prochain devrait écrire sur un exemple super de paramètres de la recherche.

Publié 85 articles originaux · louange gagné 55 · vues 20000 +

Je suppose que tu aimes

Origine blog.csdn.net/shelgi/article/details/103276140
conseillé
Classement