TensorFlow, klasik LeNet ağı ayrıntılı öğreticisini uygular

Metni girin

1. LeNet Ağına Giriş

LeNet Ağına Giriş

LeNet ağının arka planı

1.1

Önemli Noktalar: CNN'nin temel bileşenlerini tanımlar ve CNN'in yaratıcısıdır.

LeNet, 1998 yılında evrişimli sinir ağlarının dedesi LeCun tarafından, el yazısıyla yazılmış rakam tanımanın görsel görevini çözmek için önerildi. O zamandan beri, CNN'nin en temel mimarisi ayarlandı: evrişimli katman, havuz katmanı ve tamamen bağlantılı katman. Günümüzde büyük derin öğrenme çerçevelerinde kullanılan LeNet, basitleştirilmiş ve geliştirilmiş bir LeNet-5'tir (-5, 5 katman anlamına gelir) ve şu anda çok yaygın olarak kullanılan aktivasyon işlevini ReLu olarak değiştirmek gibi orijinal LeNet'ten biraz farklıdır.

Ancak her ağ katmanının belirli parametre ayarları biraz farklı olacaktır. Örneğin, evrişim çekirdeğinin boyutu ve çıktı özelliği haritalarının sayısı özelleştirilebilir.

LeNet Ağına Giriş

LeNet'in ağ yapısı

1.2

LeNet toplam 5 ağ katmanı içerir ve havuz katmanını da sayarsanız, 8 ağ katmanı vardır.

Giriş katmanı: Giriş katmanının görüntü boyutu 28x28x1'dir

Evrişimli katman 1: Evrişim çekirdeğinin boyutu 3x3x1x32 yani 32 adet 3x3x1 evrişim çekirdeğine eşdeğer, hareketli adım uzunluğu 1 yani elde edilen çıktı 32 özellik haritasıdır.Bir görüntünün 32 kanallı 28x28x32 olduğu da söylenebilir.

Havuzlama katmanı 1: Maksimum havuzlama katmanı kullanılır, 2x2 ve hareketli adım 2'dir, bu nedenle çıktı: 14x14x32'dir.

Evrişimli katman 2: Evrişim çekirdeğinin boyutu 3x3x32x64 yani 643x3x32 evrişim çekirdeğine eşdeğer, hareketli adım uzunluğu 1 yani elde edilen çıktı 64 özellik haritasıdır Bir görüntünün 64 kanala, 14x14x64 olduğu da söylenebilir.

Havuzlama katmanı 2: Maksimum havuzlama katmanı kullanılır, 2x2 ve hareketli adım 2'dir, dolayısıyla çıktı: 7x7x64

Evrişimli katman 3: Evrişim çekirdeğinin boyutu 3x3x64x128 yani 128 adet 3x3x64 evrişim çekirdeğine eşdeğerdir Hareketli adım uzunluğu 1 yani elde edilen çıktı 128 özellik haritasıdır.Bir görüntünün 128 kanallı 7x7x128 olduğu da söylenebilir.

Havuzlama katmanı 3: Maksimum havuzlama katmanı kullanılır, 2x2'dir ve hareketli adım 2'dir, dolayısıyla çıktı: 4x4x128'dir.

Tamamen bağlı katman: Giriş, tek boyutlu olarak genişletilmesi gereken 128x4x4'tür ve çıktı 625'tir.

Çıktı katmanı: Giriş 625 ve çıkış 10'dur.

LeNet Ağına Giriş

LeNet yapı diyagramı

1.3

Açıklamalar: Başlangıçta kendi kendime daha güzel bir resim çizmek istedim.Bu makaleyi yazarken acelem vardı.Bu resim sadece kaba bir taslak.İçindeki parametre boyut bilgisi bu makalenin gerçekleşmesinden farklı.

Sonraki

İki, tensorflow LeNet'i uygular

TensorFlow, LeNet'i uygular

Uygulama kodu ve yorumlar

2.1

Np olarak 1import numpy

Tf olarak 2import tensorflow

3from tensorflow.examples.tutorials.mnist import input_data #module verileri içe aktarmak için

4

5batch_size = 100 #, eğitim setinin toplam 55000 veri setine sahip olması nedeniyle, her eğitim grubunun 100 set veri olduğu anlamına gelir, bu nedenle bir eğitim döngüsü 550 yineleme gerektirir

6test_size = 256 # Doğrulama verisi olarak, doğrulama setinde 10000 veri seti vardır, ancak burada sadece 256 set doğrulanmıştır, çünkü çok fazla veri vardır ve hesaplama çok yavaştır

7img_size = 28 #El yazısı resim boyutu

8num_class = 10 # Görüntü kategorisi

9

10X = tf.placeholder (dtype = tf.float32, şekil =, ad = 'giriş')

11Y = tf.placeholder (dtype = tf.float32, şekil =)

12

13p_keep = tf.placeholder (tf.float32, name = 'p_keep_rate') # Bırakma katmanının ayrılmış parametreleri daha sonra kullanılır

14

15mnist = input_data.read_data_sets ('mnist_data', one_hot = True) #import veri kümesi

16train_X, train_Y, test_X, test_Y = mnist.train.images, mnist.train.labels, mnist.test.images, mnist.test.labels

17

18train_X = train_X.reshape (-1, img_size, img_size, 1) #Training verilerinin ve test verilerinin yeniden şekillendirilmesi gerekiyor çünkü içe aktarılan 724 uzunluk

19test_X = test_X.reshape (-1, img_size, img_size, 1)

20

21 # İlk evrişimli katman

22 tf.name_scope ('cnn_layer_01') cnn_01 olarak:

23 w1 = tf.Variable (tf.random_normal (şekil =, stddev = 0.01))

24 dönüşüm1 = tf.nn.conv2d (X, w1, adımlar =, padding = "AYNI")

25 dönş_y1 = tf.nn.relu (dönş1)

26

27 # İlk havuz katmanı

Tf.name_scope ('pool_layer_01') pool_01 olarak 28 ile:

29 pool_y2 = tf.nn.max_pool (conv_y1, ksize =, strides =, padding = 'AYNI')

30 pool_y2 = tf.nn.dropout (pool_y2, p_keep)

31

32 # İkinci evrişimli katman

33, tf.name_scope ('cnn_layer_02') ile cnn_02 olarak:

34 w2 = tf.Variable (tf.random_normal (şekil =, stddev = 0.01))

35 dönüşüm2 = tf.nn.conv2d (havuz_y2, w2, adım sayısı =, dolgu = "AYNI")

36 dönüşüm_y3 = tf.nn.relu (dönüşüm2)

37

38 # İkinci havuz katmanı

39, tf.name_scope ('pool_layer_02') pool_02 olarak:

40 pool_y4 = tf.nn.max_pool (conv_y3, ksize =, strides =, padding = 'AYNI')

41 pool_y4 = tf.nn.dropout (pool_y4, p_keep)

42

43 # Üçüncü evrişimli katman

44, tf.name_scope ('cnn_layer_03') cnn_03 olarak:

45 w3 = tf.Variable (tf.random_normal (şekil =, stddev = 0.01))

46 dönüşüm3 = tf.nn.conv2d (havuz_y4, w3, adım sayısı =, dolgu = "AYNI")

47 dönş_y5 = tf.nn.relu (dönş3)

48

49 # Üçüncü havuz katmanı

Tf.name_scope ('pool_layer_03') pool_03 olarak 50:

51 pool_y6 = tf.nn.max_pool (conv_y5, ksize =, strides =, padding = 'AYNI')

52

53 # Tamamen bağlı katman

54; tf.name_scope ('full_layer_01') full_01 olarak:

55 w4 = tf.Variable (tf.random_normal (şekil =, stddev = 0.01))

56 FC_layer = tf.reshape (havuz_y6,)

57 FC_layer = tf.nn.dropout (FC_layer, p_keep)

58 FC_y7 = tf.matmul (FC_layer, w4)

59 FC_y7 = tf.nn.relu (FC_y7)

60 FC_y7 = tf.nn.dropout (FC_y7, p_keep)

61

62 # çıktı katmanı, model_Y, sinir ağının tahmin çıktısıdır

63with tf.name_scope ('output_layer') output_layer olarak:

64 w5 = tf.Variable (tf.random_normal (şekil =))

65 model_Y = tf.matmul (FC_y7, w5, ad = 'çıktı')

66

67 # Kayıp fonksiyonu

68Y_ = tf.nn.softmax_cross_entropy_with_logits (logits = model_Y, etiketler = Y)

69cost = tf.reduce_mean (Y_)

70

71 # Doğruluk oranı

72correct_prediction = tf.equal (tf.argmax (model_Y, axis = 1), tf.argmax (Y, axis = 1))

73accuracy = tf.reduce_mean (tf.cast (right_prediction, tf.float32))

74

75 # optimizasyon yöntemi

76optimizer = tf.train.RMSPropOptimizer (0.001,0.9) .minimize (maliyet)

77

78 # İlgili parametreleri tensorboard'a yazın

79 # ------------------------------------------------ -----------------------

80tf.summary.scalar ('zarar', maliyet)

81tf.summary.scalar ('doğruluk', doğruluk)

82tf.summary.histogram ('w1', w1)

83tf.summary.histogram ('w2', w2)

84tf.summary.histogram ('w3', w3)

85tf.summary.histogram ('w4', w4)

86tf.summary.histogram ('w5', w5)

87merge = tf.summary.merge_all ()

88 # ------------------------------------------------ --------------------------

89 # İnşaat oturumu görevi

Tf.Session () oturum olarak ile 90:

91 tf.global_variables_initializer (). Run ()

92 writer = tf.summary.FileWriter ('mnist_cnn_summary_01', graph = sess.graph)

93 # [(0,100), (100,200), (200,300) değerini elde etmek için dizini yeniden düzenleyin. . . . form

94 eğitim_batch = zip (aralık (0, len (tren_X), batch_size), aralık (batch_size, len (train_X) + 1, batch_size))

95

96 run_metadata = tf.RunMetadata ()

97 # Eğitime başlayın, burada yalnızca bir dönem eğitilir, birden çok dönemi eğitmek istiyorsanız başka bir döngü ekleyebilirsiniz

Eğitim_batch'te başlangıç, bitiş için 98:

99 opti, özet, kayıp, acc = sess.run (, \

100 feed_dict = {X: train_X, Y: train_Y, p_keep: 0.8}, \

101 run_metadata = run_metadata) #Bu en kritik adımdır, optimize edici, özet, kayıp, doğruluk eğitim için bir araya getirilmiştir

102

103 writer.add_run_metadata (run_metadata, tag = 'step {0}'. Format (başlangıç), global_step = (start / batch_size) +1)

104 writer.add_summary (özet, global_step = (başlangıç / batch_size) +1)

105

106 print ({(start / batch_size) +1}. Yinelemede, doğruluk {acc} ve hata {kayıp} ', end =' \ r ', flush = True)

107

108 print ('=================== Teste başlayalım ========================= ======= ')

109 # Test setindeki verileri doğrulamaya başlayalım

110 test_index = np.arange (len (test_X))

111 np.random.shuffle (test_index) # Test setindeki 10000 veri setinin sırası hemen kaotiktir

112 test_index = test_index # Test için karıştırılmış sıranın ardından yalnızca 256 örnek veri seti seçin

113 test_acc = sess.run (doğruluk, feed_dict = {X: test_X, Y: test_Y, p_keep: 1})

114 baskı (f'Yukarıdaki test setinin doğruluğu: {test_acc} ')

115 print ('=================== Aşağıdakiler kaydetme modelidir ====================== ========= ')

116 # Kaydetme modeli

117 koruyucu = tf.train.Saver ()

118 yol = saver.save (sess, 'mnist_cnn_model / medel.ckpt')

119 yazdır (f'model Ou {yol} 'konumuna kaydet)

120 baskı ('Eğitim bitti!')

TensorFlow, LeNet'i uygular

Program çalıştırma sonuçlarının analizi

2.2

2.2.1 Baskı sonuçları

1 =================== Test etmeye aşağıdaki başlangıç ========================== ==== 857185366

2 Test setindeki doğruluk oranı 0,9765625'tir

3 =================== Aşağıda kaydetme modeli verilmiştir ========================= ======

4 Modeli mnist_cnn_model / medel.ckpt olarak kaydedin

5 Eğitim bitti!

256 set test verisinin doğruluğunun ve yukarıdakinin 0.9765625 olduğu yukarıdan görülebilir.Yalnızca bir dönem eğitiminin bu etkiyi başarabilmesi çok iyidir.

2.2.1 Hata eğrisi ve doğruluk

2.2.2 Model grafiği

Sonraki

3. Model yükleme ve tahmin

Model yükleme tahmini

tahmin sonucu

3.1

Büyülü bir eğitim tamamlandıktan sonra, modeli kaydetmeniz gerekir, böylece modeli her kullanışınızda yeniden eğitimden kaçınabilirsiniz.Bu makale yalnızca uygulama hakkında konuşur. Modelin nasıl kaydedildiği, nasıl yükleneceği ve ilgili kaydedilen dosyaların özel anlamı daha sonra tartışılacaktır. .

Rastgele 1 ithalat

2import matplotlib.pyplot olarak plt

3import tensorflow tf olarak

4from tensorflow.examples.tutorials.mnist import input_data #module verileri içe aktarmak için

5

6mnist = input_data.read_data_sets ('mnist_data', one_hot = Doğru)

7train_X, train_Y, test_X, test_Y = mnist.train.images, mnist.train.labels, mnist.test.images, mnist.test.labels

8

9

10test_image = mnist.test.images # 101'inci resmi seçin

11img_size = 28

12test_image = test_image.reshape (-1, img_size, img_size, 1)

13

Oturum olarak tf.Session () ile 14: #

15 new_saver = tf.train.import_meta_graph ('mnist_cnn_model / medel.ckpt.meta') # Adım 2: Modelin grafik yapısını içe aktarın

16 new_saver.restore (sess, 'mnist_cnn_model / medel.ckpt') # Adım 3: Bu oturumu içe aktarılan grafiğe bağlayın

17 # new_saver.restore (sess, tf.train.latest_checkpoint ('mymodel')) # Üçüncü adım da aynı olabilir, çünkü kontrol noktası mymodel klasöründen alınacak ve en son arşiv dosyası yolu kontrol noktasında saklanacaktır

18

19 baskı ('====================== Model yükleme tamamlandı ==================== ========= ')

20 X = sess.graph.get_tensor_by_name ('input: 0') # Modelden girdiyi alan düğüm

21 p_keep = sess.graph.get_tensor_by_name ('p_keep_rate: 0')

22 model_y = sess.graph.get_tensor_by_name ('output_layer / output: 0')

23 baskı ('====================== Giriş ve çıkış yüklemesi tamamlandı ================== ========== ')

24 sonuç = sess.run (model_y, feed_dict = {X: test_image, p_keep: 1}) # Gerekli olan, sonuç olarak burada saklanan model_Y model tahmin değeridir

25 baskı ('+++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++ ')

26 baskı (sonuç)

27 baskı ('+++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++ ')

28 soft_result = tf.nn.softmax (sonuç)

29 sonuç1 = sess.run (soft_result)

30 baskı (sonuç1)

31

34 plt.imshow (test_image.reshape (), cmap = 'Griler')

35 plt. Göster ()

Model yükleme tahmini

Tahmin sonuç analizi

3.2

Bu sefer yalnızca bir test resmi seçildi ve 101. resim seçildi.Programın çalışması aşağıdaki gibi görüntülenir:

Orijinal test resmi aşağıdaki gibidir:

Sonuç şu şekildedir:

1 ======================= Model yükleme tamamlandı ======================= ======

2 ===================== Giriş ve çıkış yüklemesi tamamlandı ====================== =======

3 ++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++

4

6 +++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++

7

Yukarıdaki çalışan sonuçlardan ilk sayının 0.99999416 olduğu ve diğer sayıların temelde 0'a çok yakın olduğu görülebilir, bu da bu sayının 0 olma olasılığının% 99.9999 olduğunu gösterir.

Sonraki

Tam metin özeti

Bu makale, TensorFlow'a dayalı klasik LeNet ağını yüksek doğrulukla uygular.Okuduktan sonra herhangi bir sorun veya iyileştirme alanı olduğunu düşünüyorsanız, bir mesaj bırakabilirsiniz. Ek olarak, VGGNet, GoogleNet, ResNet, DenseNet vb. Dahil olmak üzere birbiri ardına ilgili klasik ağları uygulayacağım. Derin öğrenmede birlikte öğrenmek istiyorsanız, dikkat etmeye devam edebilirsiniz.

Ayrıca, derin öğrenme ile ilgili herhangi bir sorunuz varsa, birlikte konuşabilirsiniz!

Song Qian çok akıllı. Kruvaze ceket hafif gazlı bezle eklenmiştir ve kot pantolonlarla giyilebilir.
önceki
Wuhan'daki bu robot şirketi CCTV'ye gitti ve "Kuşak ve Yol" pazarına girmek için köklü bir İtalyan şirketini satın aldı
Sonraki
Li Zixuan'ın tulum ve netizenler ile sonbahar kıyafetleri giydiğini görene kadar çok zayıf olduğunu düşünmüştüm: sırtı gerçekten güçlü
Bir makalede TensorFlow'un 8 temel noktasını okuyun
Ying Er çok güçlü, bir çift yırtık kottan yeterince göz küresi kazanıyor, netizenler: Sadece dışarı çıkma cesaretiniz varsa
Evergrande 2-1 Luneng, Taliska iki gol attı + serbest vuruş geri sayımı
Ülkenin net yetenek girişi oranında ikinci sırada yer alan Ningbo yetenekleri nasıl çekiyor?
Deng Enxi, 14 yaşındaki bir kıza çok benzemeyen, uzun pembe saçlı beyaz bir elbise giyiyor
RNN-sin sinüs dizisinin en temelli anlaşılması ve gerçekleştirilmesi
La Liga: Aspers, Girona ve Vallecanoping Huesca'yı yakalamak için Celta'yı vurdu
Kazanmak için 6 tur! Tianhai 0-0 SIPG, ikinci yarıda iki kez
Zeng Zhuangshan, gevşek bir ceket giyen ve eksik kıyafetlerin altında oynayan Wu Xuanyi'yi yendi, bacaklar Ju Jingyi'den daha ince
SIPG, SIPG ile 0-0 berabere kaldı, Mısır fırsatı kaçırdı ve Nisan ayından bu yana sadece bir galibiyet
Dünya çapında bir Çin donanması inşa etmenin beş "sorumluluğu"
To Top