Я только что создал свою собственную CNN, которая считывает данные с диска и пытается учиться.
Но веса, похоже, вообще не обучаются, все они остаются рандомизированными.
Смещения меняются лишь немного. Я уже пытался использовать изображения в оттенках серого, но безуспешно. Я также устал сокращать свой набор данных до двух классов, которые, по моему мнению, должны были сработать. Но измеренная точность ниже 50% (возможно, я неправильно рассчитываю точность)
Вот код:
Я просмотрел созданные пакеты, они выглядят нормально.
batch_x — это массив длиной 2304 значения с плавающей точкой, которые представляют изображение 48x48.
batch_y — это массив с метками one_hot: [0 0 ... 0 1 0 ... 0 0]
Это моя модель:
Я только что создал свою собственную CNN, которая считывает данные с диска и пытается учиться. Но веса, похоже, вообще не обучаются, все они остаются рандомизированными. Смещения меняются лишь немного. Я уже пытался использовать изображения в оттенках серого, но безуспешно. Я также устал сокращать свой набор данных до двух классов, которые, по моему мнению, должны были сработать. Но измеренная точность ниже 50% (возможно, я неправильно рассчитываю точность) Вот код: [code]x = tf.placeholder(tf.float32, [None, n_input]) y = tf.placeholder(tf.float32, [None, classes]) weights = { 'wc1': tf.Variable(tf.random_normal([5, 5, 1, 32])), 'wc2': tf.Variable(tf.random_normal([5, 5, 32, 64])), 'wd1': tf.Variable(tf.random_normal([12*12*64, 1024])), 'out': tf.Variable(tf.random_normal([1024, classes])) } biases = { 'bc1': tf.Variable(tf.random_normal([32])), 'bc2': tf.Variable(tf.random_normal([64])), 'bd1': tf.Variable(tf.random_normal([1024])), 'out': tf.Variable(tf.random_normal([classes])) }
pred = model.conv_net(x, weights, biases, keep_prob, imgSize)
with tf.name_scope("cost"): cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y)) with tf.name_scope("optimizer"): optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost) with tf.name_scope("accuracy"): correct_pred = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1)) accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32)) init = tf.global_variables_initializer()
with tf.Session() as sess: sess.run(init) while(step < epochs): batch_x, batch_y = batch_creator(batch_size, train_x.shape[0], 'train') sess.run(optimizer, feed_dict={x: batch_x, y: batch_y, keep_prob: dropout}) if(step % display_step == 0): batchv_x, batchv_y = batch_creator(batch_size, val_x.shape[0], 'val') summary, loss, acc = sess.run([merged, cost, accuracy], feed_dict={x: batchv_x, y: batchv_y}) train_writer.add_summary(summary, step) [/code] Я просмотрел созданные пакеты, они выглядят нормально. batch_x — это массив длиной 2304 значения с плавающей точкой, которые представляют изображение 48x48. batch_y — это массив с метками one_hot: [0 0 ... 0 1 0 ... 0 0] Это моя модель: [code]def conv2d(x, W, b, strides=1): x = tf.nn.conv2d(x, W, strides=[1, strides, strides, 1], padding='SAME') x = tf.nn.bias_add(x, b) return tf.nn.relu(x)
out = tf.add(tf.matmul(fc1, weights['out']), biases['out'], name="out") #(?, 43) return out [/code] PS: Вот так выглядят некоторые фильтры второго сверточного слоя (не важно, сколько эпох спустя) [img]https://i.sstatic.net/LoP8j.png[/img]