Guest User

Untitled

a guest
Jul 31st, 2016
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.60 KB | None | 0 0
  1. import tensorflow as tf
  2.  
  3. X = dane_x[0].shape[0]
  4. Y = dane_x[0].shape[1]
  5. N = X*Y
  6.  
  7. def splot(obraz, waga, bias):
  8. return tf.nn.relu( tf.nn.bias_add( tf.nn.conv2d(obraz, waga, strides=[1,1,1,1], padding="SAME"), bias ) )
  9.  
  10. def max_pool(obraz, k):
  11. return tf.nn.max_pool( obraz, ksize=[1,k,k,1], strides=[1,k,k,1], padding="SAME")
  12.  
  13. def zmienna_wagowa(rozmiar, sd):
  14. z = tf.truncated_normal(rozmiar, stddev=sd)
  15. return tf.Variable(z)
  16.  
  17. def zmienna_przesuniecia(rozmiar):
  18. z = tf.constant(0, shape=rozmiar, dtype=tf.float32)
  19. return tf.Variable(z)
  20.  
  21. def wagi(filtr_x, filtr_y, k, warstwa):
  22.  
  23. wagi = {
  24. 'splot_1': zmienna_wagowa([filtr_x, filtr_y, 1, 32], 0.1),
  25. 'splot_2': zmienna_wagowa([filtr_x, filtr_y, 32, 64], 0.1),
  26. 'polaczenie': zmienna_wagowa([ (X // k )* (Y // k )*64, warstwa ], 0.1),
  27. 'wyjscie': zmienna_wagowa([warstwa, 2], 0.1)
  28. }
  29. return wagi
  30.  
  31. def przesuniecia(warstwa):
  32. przes = {
  33. 'splot_1': zmienna_przesuniecia([32]),
  34. 'splot_2': zmienna_przesuniecia([64]),
  35. 'polaczenie': zmienna_przesuniecia([warstwa]),
  36. 'wyjscie': zmienna_przesuniecia([2])
  37. }
  38. return przes
  39.  
  40. def siec(obraz, filtr_x, filtr_y, k, wielkosc_warstwy, dp):
  41.  
  42.  
  43. obraz = tf.reshape(obraz, shape=[-1, X, Y, 1])
  44. S1 = splot(obraz, wagi(3,3,2,512)['splot_1'], przesuniecia(512)['splot_1'])
  45. S1 = max_pool(S1, k)
  46. S1 = tf.nn.dropout(S1, dp )
  47.  
  48. S2 = splot(S1, wagi(3,3,2,512)['splot_2'], przesuniecia(512)['splot_2'])
  49. S2 = max_pool(S2, k)
  50. S2 = tf.nn.dropout(S2, dp)
  51.  
  52. pol = tf.reshape(S2, [-1, wagi(3,3,2,512)['polaczenie'].get_shape().as_list()[0] ])
  53. pol = tf.nn.relu( tf.nn.bias_add( tf.matmul( pol, wagi(3,3,2,512)['polaczenie'] ),
  54. przesuniecia(512)['polaczenie']) )
  55. pol = tf.nn.dropout(pol, dp)
  56.  
  57. wyjscie = tf.add( tf.matmul( pol, wagi(3,3,2,512)['wyjscie']), przesuniecia(512)['wyjscie'])
  58. return wyjscie
  59.  
  60. def podaj_dane(zbiornik_X, zbiornik_Y, rozmiar_probki, krok):
  61.  
  62. start = krok*rozmiar_probki % ( len(zbiornik_X) - rozmiar_probki )
  63. batchX = zbiornik_X[start:start+rozmiar_probki]
  64. batchY = zbiornik_Y[start:start+rozmiar_probki]
  65.  
  66. return batchX, batchY
  67.  
  68. learning_rate = 1e-3
  69. rozmiar_probki = 20
  70. liczba_iteracji = int(10e4)
  71. x = tf.placeholder(tf.float32, [None, X, Y])
  72. y = tf.placeholder(tf.float32, [None, 2])
  73. keep_prob = tf.placeholder(tf.float32)
  74. dropout = 0.75
  75.  
  76. co_ile_wyswietlamy = 1200
  77.  
  78. przewidywania = siec(x, 3, 3, 2, 512, keep_prob)
  79.  
  80. koszt = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(przewidywania, y))
  81. optymalizacja = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(koszt)
  82.  
  83. init = tf.initialize_all_variables()
  84.  
  85. czy_dobrze = tf.equal(tf.argmax(przewidywania,1), tf.argmax(y,1))
  86. dokladnosc = tf.reduce_mean( tf.cast( czy_dobrze, tf.float32) )
  87.  
  88. with tf.Session() as sess:
  89. sess.run(init)
  90. krok = 0
  91.  
  92. while krok*rozmiar_probki < liczba_iteracji:
  93. batch_X, batch_Y = podaj_dane(dane_x, dane_y, rozmiar_probki, krok)
  94. sess.run(optymalizacja, feed_dict={x: batch_X, y: batch_Y, keep_prob: dropout})
  95.  
  96. if krok % co_ile_wyswietlamy:
  97. dokl = sess.run(dokladnosc, feed_dict={x:batch_X, y:batch_Y, keep_prob: 1.})
  98. strata = sess.run(kosz, feed_dict={x:batch_X, y:batch_Y, keep_prob: 1.})
  99.  
  100. print("Iteracja nr " + str(krok*rozmiar_probki) + ", dokladnosc to {:.3f}".format(dokl), \
  101. ", strata to {:.3f}".format(strata))
  102.  
  103. krok += 1
Advertisement
Add Comment
Please, Sign In to add comment