Deep Learning – Praktisches Kapitel (12) – LetNet-5 von TensorFlow

Wissenschaftliches Wissen

Wenn in einem neuronalen Netzwerk die Lernrate der vorderen verborgenen Schicht niedriger ist als die der hinteren verborgenen Schicht, das heißt, wenn die Anzahl der verborgenen Schichten zunimmt, nimmt stattdessen die Klassifizierungsgenauigkeit ab. Dieses Phänomen wird als Problem des verschwindenden Gradienten bezeichnet.

Lösung: Vortraining plus Feinabstimmung, Gradientenschnitt, Regularisierung, Relu, Leakrelu, Elu und andere Aktivierungsfunktionen.

Rezension

Dieser Artikel folgt eng dem theoretischen Artikel von  Deep Learning Theory (13) – dem aufstrebenden Artikel von LetNet-5. In diesem Artikel haben wir seine Netzwerkstruktur und spezifische Dimensionsinformationen analysiert. Heute wird der Herausgeber jeden dazu bringen, zuzuschlagen, während das Eisen heiß ist Verwenden Sie für den eigentlichen Kampf Tensoflow, um die LetNet-5-Netzwerkstruktur zu schreiben, und verwenden Sie sie, um ein Klassifizierungsnetzwerk zu erstellen, werfen wir einen Blick darauf.

1. Datenaufbereitung

Wir verwenden für dieses Projekt immer noch den vorherigen binären Klassifikationsdatensatz für Katzen und Hunde, der in Trainingssatz und Testsatz unterteilt ist (entspricht jeweils einem Ordner), und jeder Satz enthält Katzen- und Hundekategorien (Ordner).

Bevor die Bilddaten an das neuronale Netzwerk übergeben werden, muss das Bild auf eine einheitliche Form gebracht werden.Im vorherigen Artikel war unsere Eingabe 32x32, aber für unseren eigentlichen Katzen- und Hundedatensatz werden eine solche Länge und Breite sein in gewissem Umfang Die Details des Verlustbildes, also die einheitliche Größe, die wir verwenden, ist: 150 * 150.

2. Netzwerkstruktur

# LetNet-5-Netzwerkstruktur

# Eingang: 3*150*150 stellt einen Dreikanal-Farbbildeingang dar, und die Bildgröße beträgt 150*150

# Faltungsschicht 1: Die Größe des Faltungskerns ist 5*5 Die Anzahl der Faltungskerne: 6 Schrittlänge: 1

# Downsampling-Ebene 1: Sampling-Bereich: 2*2-Schrittweite: Standard ist 1

# Faltungsschicht 2: Die Größe des Produktkerns beträgt 5*5, die Anzahl der Faltungskerne: 16 und die Schrittgröße: 1

# Downsampling-Ebene 1: Sampling-Bereich: 2*2-Schrittweite: Standard ist 1

# Faltungsschicht 2: Die Größe des Produktkerns beträgt 5*5, die Anzahl der Faltungskerne: 120 und die Schrittgröße: 1

# Vollständig verbundene Schicht 1: Ausgang 84

# Vollständig verbundene Schicht 2: Ausgang 2

# 定义平均池化层
def Avg_pool_lrn(names, input, ksize, is_lrn):
    with tf.variable_scope(names) as scope:
        # 最大池化操作
        Avg_pool_out = tf.nn.avg_pool(input, ksize = ksize, strides = [1, 2, 2, 1], padding = 'SAME', name = 'max_pool_{}'.format(names))
        if is_lrn:
            # 是否增加一个lrn操作,一般来说用增加非线性表达和抑制过拟合
            Avg_pool_out = tf.nn.lrn(Avg_pool_out, depth_radius=4, bias=1.0, alpha=0.001 / 9.0, beta=0.75, name = 'lrn_{}'.format(names))
            print("use lrn operation")
    return Avg_pool_out
 
 #网络结构代码
def inference(images, batch_size, n_classes,drop_rate):
    conv1 = Conv_layer(names = 'conv1_scope', input = images , w_shape = [5, 5, 3, 6], b_shape = [6], strid = [1, 1])
    print("---------conv1:{}".format(conv1))
    down_sample1 = Avg_pool_lrn(names = 'avg_pooling1', input = conv1 , ksize = [1, 2, 2, 1], is_lrn = False)
    print("---------down_sample1:{}".format(down_sample1))
    conv2 = Conv_layer(names = 'conv2_scope', input = down_sample1 , w_shape = [5, 5, 6, 16], b_shape = [16], strid = [1, 1])
    down_sample2 = Avg_pool_lrn(names = 'avg_pooling2', input = conv2 , ksize = [1, 2, 2, 1], is_lrn = False)
    conv3 = Conv_layer(names = 'conv3_scope', input = down_sample2 , w_shape = [5, 5, 16, 120], b_shape = [120], strid = [1, 1])
    
    # conv-->local dimension change
    reshape = tf.reshape(conv3, shape=[batch_size, -1])
    dim = reshape.get_shape()[1].value
    local_1 = local_layer(names = 'local1_scope', input = reshape , w_shape = [dim, 84], b_shape = [84])


    # 
    # 将前面的FC层输出,再次做一个FC
    with tf.variable_scope('softmax_linear') as scope:
        weights = tf.Variable(tf.truncated_normal(shape=[84, n_classes], stddev=0.005, dtype=tf.float32),
                              name='softmax_linear', dtype=tf.float32)


        biases = tf.Variable(tf.constant(value=0.1, dtype=tf.float32, shape=[n_classes]),
                             name='biases', dtype=tf.float32)


        softmax_linear = tf.add(tf.matmul(local_1, weights), biases, name='softmax_linear')
        # print("---------softmax_linear:{}".format(softmax_linear))


    return softmax_linear

Trainingsprozess

Für den Code des Trainingsprozesses verwenden wir immer noch den ersten gemeinsamen Bildklassifizierungscode, bevor ohne Änderungen nur die Netzwerkstruktur geändert wird, sodass der vorherige Code ein allgemeiner Bildklassifizierungscode ist.

Anzeige der Trainingsergebnisse

Im Allgemeinen bedeutet eine Genauigkeit des Testsets von mehr als 90 %, dass die Anpassungsfähigkeit des Netzwerks stark ist. Wenn sie später verbessert werden muss, sind weitere Trainingstechniken und Netzwerkverbesserungen erforderlich.

Tipps: Wie kann man erkennen, ob unsere Grafikkarte für Deep-Learning-Training auf einem Windows-Computer verwendet wird?

Öffnen Sie einfach die Aufgabenverwaltung, suchen Sie die GPU und überprüfen Sie die Videospeichernutzung.

Frage : Da die Eingabedaten dieses Artikels nicht die vorherigen 32 * 32, sondern 150 * 150 sind, unterscheidet sich die Form der Feature-Map, die von jeder Schicht des Netzwerks ausgegeben wird, von der des vorherigen Artikels. Daher hoffe ich, Partner sorgfältig zu studieren um die Ausgabeform jeder Schicht zu berechnen, um ein tieferes Verständnis des gesamten Änderungsprozesses der Feature-Map von der Eingabe bis zur Ausgabe zu erhalten, anstatt einfach ein Netzwerk zu schreiben.

Epilog

Dies ist das Ende des heutigen Teilens. Durch die Grundlage des theoretischen Kapitels werden wir Codeoperationen im eigentlichen Kampfkapitel ausführen. Ist es auf diese Weise schneller zu verstehen? Ich hoffe, dass alle nach unten gehen und hart üben und Ihr erstes Deep-Learning-Projekt so schnell wie möglich auslaufen lassen. Später wird es noch weitere Netzwerkstrukturen geben.

Herausgeber: Laie Yueyi | Rezension: Laie Xiaoquanquan

Frühere Empfehlung

0 1

Deep Learning Praktisches Kapitel (11) -- TensorFlow Learning Road (8)

0 2

Deep Learning Praxiskapitel (10) -- TensorFlow Learning Road (7)

0 3

Deep Learning Praxiskapitel (9) -- TensorFlow Learning Road (6)

Scannen Sie den Code, um uns zu folgen

  Fortgeschrittene IT-Tour

Lobe mich, wenn ich dich sehe!

Acho que você gosta

Origin blog.csdn.net/xyl666666/article/details/119524308
Recomendado
Clasificación