コンボリューションニューラルネットワークCNN(Tensorflow 2.1)

これは、パラメータを変更することなく、複数で試験の精度は、98%に99.1%まで変化形而上

参考リンク:「シンプルで、粗Tensorflow」、ブラスタ

tensorflowインポートAS TF 
インポートnumpyのAS NP 

クラスMNISTLoader():
    DEF __init __(自己):
        MNIST = tf.keras.datasets.mnist 
        (self.train_data、self.train_label)、(self.test_data、self.test_label) = MNIST。 LOAD_DATA() のMNIST画像のデフォルトがuint8(0 -255数)。それらの0-正規化された次のコードは、浮動小数点数1とカラー次元チャンネルとして最後に追加間
        self.train_data = np.expand_dims(self.train_data.astype(np.float32)/ 255.0、軸= - 1)#[ 6000028281 ]
        self.test_data = np.expand_dims(self.test_data.astype(np.float32)/ 255.0、軸= - 。1)#[ 1000028281。] 
        self.train_label = self.train_label.astype(np.int32) #[ 60000 ] 
        self.test_label = self.test_label.astype(np.int32)#[ 10000 ] 
        self.num_train_data、self.num_test_data = self.train_data.shape [ 0 ]、self.test_data.shape [ 0 ] 

    DEF get_batch(セルフ、BATCH_SIZE):
        データ戻るからランダムに採取#濃縮BATCH_SIZE要素
        インデックス= np.random.randint(0、np.shape(self.train_data)[ 0 ]、BATCH_SIZE)
         戻りself.train_data [インデックス、:]、self.train_label [インデックス] 


#tf.keras.layers.Conv2D( フィルタ、kernel_size、ストライド =(11)、パディング= ' 有効'、DATA_FORMAT = なし、
#dilation_rate =(11)、活性化=なし、use_bias = 真、
#kernel_initializer = ' glorot_uniform '、bias_initializer = ' ゼロ'  
#kernel_regularizer =なし、bias_regularizer =なし、activity_regularizer = なし、
#kernel_constraint =なし、bias_constraint =なし、** kwargsから
#) フィルタ:整数、空間の次元フィルタの出力(出力IEザ・ナンバーコンボリューション)。
#kernel_size:整数受容野またはアンタプルの/リスト2つの整数、ウィンドウ2D畳み込みの高さと幅を指定する。
#ストライド:垂直方向と水平方向のストライド
#パディング:有効:廃棄されるコンボリューションカーネルのサイズのブロックを表していません。それは同じの大きさは、ブロック0、同じ形状の出力と入力作るのに十分ではありません畳み込みカーネルを表す

クラス:CNN(tf.keras.Model)
    DEF __init __(自己を):
        スーパー()__ .__のinit()
        self.conv1 =tf.keras.layers.Conv2D(
            フィルタ = 32 、#ニューロン畳み込み(コンボリューション)数
            kernel_size = [ 55 ]、#受容野サイズの
            パディング = ' と同じ' 、#パディングポリシー(又はvaild同じ)
            活性化 = tf.nn.relu#活性化関数
        self.pool = tf.keras.layers.MaxPool2D(POOL_SIZE = [ 22 ]、ストライド= 2 
        self.conv2 = tf.keras.layers.Conv2D(
            フィルタ = 64 = [
            kernel_size 55 ]、
            パディング = ' 同じ' 
            活性化 = tf.nn.relu 
        self.flatten = tf.keras.layers.Reshape(target_shape =(7 * 7 * 64 ))
        self.dense1 = tf.keras .layers.Dense(単位= 1024、活性化= tf.nn.relu)
        self.dense2 = tf.keras.layers.Dense(単位= 10 

    DEF(自己、入力)呼び出し:
        X = self.conv1(入力)# [バッチサイズ、282832 ] 
        X = self.pool(X)#[BATCH_SIZE、141432 ] 
        X = self.conv2(X)#[BATCH_SIZE、141464 ] 
        X = self.pool(X)#[ BATCH_SIZE、7764 ] 
        X = self.flatten(X)#[BATCH_SIZE、7 * 7 * 64 ] 
        X= self.dense1(X)#[BATCH_SIZE、1024 ] 
        X = self.dense2(X)#[BATCH_SIZE、10 ] 
        出力 = tf.nn.softmax(X)
         リターン出力

num_epochs = 5 
BATCH_SIZE = 50 
learning_rate = 0.001 

モデル = CNN()
data_loader = MNISTLoader()
オプティマイザ = tf.keras.optimizers.Adam(learning_rate = learning_rate)

num_batches = INT(data_loader.num_train_data //* num_epochs BATCH_SIZE)
 batch_index における範囲(num_batches):
    X-、Y = data_loader.get_batch(BATCH_SIZE)#は、ランダムデータからデータセットの部分を選択
    tf.GradientTape()とAS :テープ
        y_pred = 予測値#与えるモデル(X-)
        損失 tf.keras.losses.sparse_categorical_crossentropy =(Y = y_true、y_pred = y_pred)#損失算出
        損失 = tf.reduce_mean(損失)
        プリント(" バッチ%のD:損失%F "(batch_index、loss.numpy()))
    GrADSの = tape.gradient(損失、model.variables)#calc卒業生
    optimizer.apply_gradientsは(grads_and_varsは =ZIP(GrADSの、model.variables))#update GrADSの

#tf.keras.metrics.SparseCategoricalAccuracy推定器
#は理解していない理由をチェックバッチ予測値
sparse_categorical_accuracy = tf.keras.metrics.SparseCategoricalAccuracy()
num_batches = INT(data_loader.num_test_data // BATCH_SIZE)
 batch_index における範囲(num_batches):
    START_INDEX、END_INDEX = batch_index BATCH_SIZE *、(+ batch_index 。1)* BATCH_SIZEの
    #model.predictテストデータ入力、及び出力予測結果
    y_pred = model.predict (data_loader.test_data [START_INDEX:END_INDEX])
    sparse_categorical_accuracy.update_state(y_true = data_loaderを。 test_label [START_INDEX:END_INDEX] y_pred =y_pred)
プリント(" 試験精度:%F "%のsparse_categorical_accuracy.result())

 

おすすめ

転載: www.cnblogs.com/lalalatianlalu/p/12499618.html