Guest User

Untitled

a guest
May 24th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.63 KB | None | 0 0
  1. import tensorflow as tf
  2. import os
  3.  
  4. batch_size = 32
  5. img_size=64
  6. num_channels = 3;
  7. num_classes = 41;
  8.  
  9. ## labels
  10. img_data = tf.placeholder(tf.float32, shape=[None, img_size, img_size, num_channels], name='img_data')
  11. img_labels = tf.placeholder(tf.float32, shape=[None, num_classes], name='img_labels')
  12. img_labels_cls = tf.argmax(img_labels, dimension=1)
  13.  
  14. ##Network graph params
  15. filter_size_conv1 = 3
  16. num_filters_conv1 = 32
  17.  
  18. filter_size_conv2 = 3
  19. num_filters_conv2 = 32
  20.  
  21. filter_size_conv3 = 3
  22. num_filters_conv3 = 64
  23.  
  24. fc_layer_size = 128
  25.  
  26. def create_weights(shape):
  27. return tf.Variable(tf.truncated_normal(shape,stddev=0.05))
  28.  
  29. def create_biases(size):
  30. return tf.Variable(tf.constant(0.05, shape=[size]))
  31.  
  32. def create_convolutional_layer(input,
  33. num_input_channels,
  34. conv_filter_size,
  35. num_filters):
  36.  
  37. weights = create_weights(shape=[conv_filter_size, conv_filter_size, num_input_channels, num_filters])
  38. biases = create_biases(num_filters)
  39.  
  40. ## Add conv layer
  41. layer = tf.nn.conv2d(input=input,
  42. filter=weights,
  43. strides=[1, 1, 1, 1],
  44. padding='SAME')
  45.  
  46. layer += biases
  47.  
  48. ## We shall be using max-pooling.
  49. layer = tf.nn.max_pool(value=layer,
  50. ksize=[1, 2, 2, 1],
  51. strides=[1, 2, 2, 1],
  52. padding='SAME')
  53. ## Output of pooling is fed to Relu which is the activation function for us.
  54. layer = tf.nn.relu(layer)
  55. return layer
  56.  
  57. def create_flatten_layer(layer):
  58. layer_shape = layer.get_shape()
  59. num_features = layer_shape[1:4].num_elements()
  60. layer = tf.reshape(layer, [-1, num_features])
  61. return layer
  62.  
  63. def create_fc_layer(input,
  64. num_inputs,
  65. num_outputs,
  66. use_relu=True):
  67.  
  68. #Let's define trainable weights and biases.
  69. weights = create_weights(shape=[num_inputs, num_outputs])
  70. biases = create_biases(num_outputs)
  71.  
  72. layer = tf.matmul(input, weights) + biases
  73. if use_relu:
  74. layer = tf.nn.relu(layer)
  75. return layer
  76.  
  77. layer_conv1 = create_convolutional_layer(input=img_data,
  78. num_input_channels=num_channels,
  79. conv_filter_size=filter_size_conv1,
  80. num_filters=num_filters_conv1)
  81.  
  82. layer_conv2 = create_convolutional_layer(input=layer_conv1,
  83. num_input_channels=num_filters_conv1,
  84. conv_filter_size=filter_size_conv2,
  85. num_filters=num_filters_conv2)
  86.  
  87. layer_conv3= create_convolutional_layer(input=layer_conv2,
  88. num_input_channels=num_filters_conv2,
  89. conv_filter_size=filter_size_conv3,
  90. num_filters=num_filters_conv3)
  91.  
  92. layer_flat = create_flatten_layer(layer_conv3)
  93.  
  94. layer_fc1 = create_fc_layer(input=layer_flat,
  95. num_inputs=layer_flat.get_shape()[1:4].num_elements(),
  96. num_outputs=fc_layer_size,
  97. use_relu=True)
  98.  
  99. layer_fc2 = create_fc_layer(input=layer_fc1,
  100. num_inputs=fc_layer_size,
  101. num_outputs=num_classes,
  102. use_relu=False)
  103.  
  104.  
  105.  
  106. cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits=layer_fc2,
  107. labels=img_labels)
  108. cost = tf.reduce_mean(cross_entropy)
  109. pred_lab = tf.nn.softmax(layer_fc2,name='pred_lab')
  110. pred_lab_cls = tf.argmax(pred_lab, dimension=1)
  111.  
  112. tr_op = tf.train.AdamOptimizer(learning_rate=1e-4).minimize(cost)
  113.  
  114. correct_prediction = tf.equal(pred_lab_cls, img_labels_cls)
  115. accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
  116.  
  117.  
  118.  
  119. def read_and_decode_single_example(filename):
  120. # first construct a queue containing a list of filenames.
  121. # this lets a user split up there dataset in multiple files to keep
  122. # size down
  123. filename_queue = tf.train.string_input_producer([filename],
  124. num_epochs=None)
  125. # Unlike the TFRecordWriter, the TFRecordReader is symbolic
  126. reader = tf.TFRecordReader()
  127. # One can read a single serialized example from a filename
  128. # serialized_example is a Tensor of type string.
  129. _, serialized_example = reader.read(filename_queue)
  130. # The serialized example is converted back to actual values.
  131. # One needs to describe the format of the objects to be returned
  132. features = tf.parse_single_example(
  133. serialized_example,
  134. features={
  135. 'label':tf.FixedLenFeature([41], tf.float32),
  136. 'image':tf.FixedLenFeature([12288], tf.float32)
  137. })
  138. # now return the converted data
  139. label = features['label']
  140. img = features['image']
  141. image = tf.reshape(img, [64,64,3])
  142. return label, image
  143.  
  144.  
  145. # returns symbolic label and image
  146. path = os.path.join(r'C:\Users\CalcBox\Documents\NeuralNet\Kaggle\Freesound',
  147. 'TfRecords\FreeSoundTrain64.tfrecords')
  148. # get single examples
  149. label, image = read_and_decode_single_example(path)
  150.  
  151. # groups examples into batches randomly
  152. images_batch, labels_batch = tf.train.shuffle_batch(
  153. [image, label], batch_size=128,
  154. capacity=2000,
  155. min_after_dequeue=1000)
  156.  
  157. sess = tf.Session()
  158. init = tf.initialize_all_variables()
  159. sess.run(init)
  160. tf.train.start_queue_runners(sess=sess)
  161.  
  162.  
  163. labels, images= sess.run([labels_batch, images_batch])
  164. feed_dict = {img_data: images,img_labels: labels,}
  165. print(type(tr_op))
  166. print(type(feed_dict))
  167. try:
  168. some_object_iterator = iter(feed_dict)
  169. except TypeError as te:
  170. print (feed_dict, 'is not iterable')
  171. print(feed_dict)
  172. _ , loss_val = sess.run(tr_op,
  173. feed_dict=feed_dict)
  174. print('Loss of the current batch is {}'.format(loss_val))
Add Comment
Please, Sign In to add comment