Dense- en TimeDistributed-lagen

Machine Translation met Keras

Thushan Ganegedara

Data Scientist and Author

Introductie tot de Dense-laag

  • Neemt een invoervector en zet die om naar een probabilistische voorspelling.
    • y = Gewichten.x + Bias

Gewichten en bias

Machine Translation met Keras

De Dense-laag begrijpen

Een Dense-laag definiëren en gebruiken

dense = Dense(3, activation='softmax')
inp = Input(shape=(3,))
pred = dense(inp)
model = Model(inputs=inp, outputs=pred)

Een Dense-laag met aangepaste initialisatie

from tensorflow.keras.initializers import RandomNormal
init = RandomNormal(mean=0.0, stddev=0.05, seed=6000)
dense = Dense(3, activation='softmax', 
             kernel_initializer=init, bias_initializer=init)
Machine Translation met Keras

Input en output van de Dense-laag

  • Dense softmax-laag
    • Neemt een (batch size, input size)-array
      • bijv. x = [[1, 6, 8], [8, 9, 10]] # een 2x3-array
    • Produceert een (batch size, num classes)-array
      • bijv. Aantal klassen = 4
      • bijv. y = [[0.1, 0.3, 0.4, 0.2], [0.2, 0.5, 0.1, 0.2]] # een 2x4-array
    • Uitvoer per sample is een kansverdeling over de klassen
      • Somt tot 1 per rij
    • Haal de klasse per sample met np.argmax(y, axis=-1)
      • bijv. np.argmax(y,axis=-1) geeft [2,1]
Machine Translation met Keras

De TimeDistributed-laag begrijpen

  • Laat Dense-lagen tijdreeksen verwerken
dense_time = TimeDistributed(Dense(3, activation='softmax'))
inp = Input(shape=(2, 3))
pred = dense_time(inp)
model = Model(inputs=inp, outputs=pred)
Machine Translation met Keras

Input en output van de TimeDistributed-laag

  • Neemt een (batch size, sequence length, input size)-array
x = [[[1, 6], [8, 2], [1, 2]], 
    [[8, 9], [10, 8], [1, 0]]] # een 2x3x2-array
  • Produceert een (batch size, sequence length, num classes)-array
    • bijv. Aantal klassen = 3
y = [[[0.1, 0.5, 0.4], [0.8, 0.1, 0.1], [0.6, 0.2, 0.2]], 
     [[0.2, 0.5, 0.3], [0.2, 0.5, 0.3], [0.2, 0.8, 0.0]]] # een 2x3x3-array
  • Uitvoer per sample is een kansverdeling over de klassen
  • Haal de klasse per sample met np.argmax(y, axis=-1)
Machine Translation met Keras

Slices maken in de tijddimensie

y = [[[0.1, 0.5, 0.4], [0.8, 0.1, 0.1], [0.6, 0.2, 0.2]], 
     [[0.2, 0.5, 0.3], [0.2, 0.5, 0.3], [0.2, 0.8, 0.0]]] # een 2x3x3-array
classes = np.argmax(y, axis=-1) # een 2x3-array

Itereren over time-distributed data

for t in range(3):
  # Pak de t-de slice in de tijddimensie van y en classes
  for prob, c in zip(y[:,t,:], classes[:,t]):
     print("Prob: ", prob, ", Class: ", c)
Prob:  [0.1 0.5 0.4] , Class:  1
Prob:  [0.2 0.5 0.3] , Class:  1
Prob:  [0.8 0.1 0.1] , Class:  0
...
Machine Translation met Keras

Laten we oefenen!

Machine Translation met Keras

Preparing Video For Download...