Я пытаюсь обучить простую нейронную сеть , которая состоит из:нейронные сети слепой угадывание
- Свертка слоя фильтра (5х5) х 8, шаг 2.
- Макс пулы 25x25 (изображение имеет своего рода низкое количество деталей)
- матирующего выхода в (2x2x8) вектор
- классификатор с логистической регрессией
Altogethe r имеет < 1000 весов.
Файл: nn.py
#!/bin/python
import tensorflow as tf
import create_batch
# Prepare data
batch = create_batch.batch
x = tf.reshape(batch[0], [-1,100,100,3])
y_ = batch[1]
# CONVOLUTION NETWORK
# For initialization
def weight_variable(shape):
initial = tf.truncated_normal(shape, stddev=0.3)
return tf.Variable(initial)
def bias_variable(shape):
initial = tf.constant(0.2, shape=shape)
return tf.Variable(initial)
# Convolution with stride 1
def conv2d(x, W):
return tf.nn.conv2d(x, W, strides=[1, 2, 2, 1], padding='SAME')
def max_pool_25x25(x):
return tf.nn.max_pool(x, ksize=[1, 25, 25, 1],
strides=[1, 25, 25, 1], padding='SAME')
# First layer
W_conv1 = weight_variable([5, 5, 3, 8])
b_conv1 = bias_variable([8])
x_image = tf.reshape(x, [-1,100,100,3])
# First conv1
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_25x25(h_conv1)
# Dense connection layer
# make data flat
W_fc1 = weight_variable([2 * 2 * 8, 2])
b_fc1 = bias_variable([2])
h_pool1_flat = tf.reshape(h_pool1, [-1, 2*2*8])
y_conv = tf.nn.softmax(tf.matmul(h_pool1_flat, W_fc1) + b_fc1)
#Learning
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y_conv), reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
# Session
sess = tf.Session()
sess.run(tf.initialize_all_variables())
# Start input enqueue threads.
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)
for i in range(200):
if i%10 == 0:
train_accuracy = accuracy.eval(session=sess)
print("step %d, training accuracy %g"%(i, train_accuracy))
train_step.run(session=sess)
Файл: create_batch.py
#!/bin/python
import tensorflow as tf
PATH1 = "../dane/trening/NK/"
PATH2 = "../dane/trening/K/"
def create_labeled_image_list():
filenames = [(PATH1 + "nk_%d.png" % i) for i in range(300)]
labels = [[1,0] for i in range(300)]
filenames += [(PATH2 + "kulki_%d.png" % i) for i in range(300)]
labels += [[0,1] for i in range(300)]
return filenames, labels
def read_images_from_disk(input_queue):
label = input_queue[1]
file_contents = tf.read_file(input_queue[0])
example = tf.image.decode_png(file_contents, channels=3)
example.set_shape([100, 100, 3])
example = tf.to_float(example)
print ("READ, label:")
print(label)
return example, label
# Start
image_list, label_list = create_labeled_image_list()
# Create appropriate tensors for naming
images = tf.convert_to_tensor(image_list, dtype=tf.string)
labels = tf.convert_to_tensor(label_list, dtype=tf.float32)
input_queue = tf.train.slice_input_producer([images, labels],
shuffle=True)
image, label = read_images_from_disk(input_queue)
batch = tf.train.batch([image, label], batch_size=600)
Я кормлю 100x100 изображения У меня есть два classess 300 изображений каждый. В принципе, случайно запущенная сеть на этапе 0 имеет лучшую точность, чем обученная. Сеть перестает учиться после достижения 0,5 точности (в основном, с переводом монет). Изображения содержат вещь голубого цвета (класс 1) или траву (класс 2).
Я транслирую сеть с использованием всего набора изображений сразу (600 изображений), функция потерь - это кросс-энтропия.
Что я делаю неправильно?
Не могли бы вы разместить весь код? С кодом о том, как вы на самом деле выполняете тренировочный сеанс и т. Д. Также переменные веса инициализируются нечетным образом (они не являются tf.Variable). Честно говоря, я предлагаю вам проверить мой код здесь, я создаю там коннеки и тренирую их: https://github.com/MaxKHK/Udacity_DeepLearningAssignments/blob/master/Assignment4/4_convolutions.ipynb –
@MaximHaytovich целые кодовые сообщения никогда не поощряются стек и фактически viloates условия публикации. – rogue39nin
@david Я имел в виду «сообщение на pastebin и добавление ссылки здесь» или smth, как это - оригинальный вопрос имел слишком мало информации для работы с –