TensorFlow实现简单CNN图像分类

in TensorFlow笔记 | 5 comments | 阅读量: 841

卷积的示意图如下:
conv_tutorial.png

import tensorflow as tf

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("../MNIST_data/", one_hot=True)

# parameters
learning_rate = 0.001
training_iter = 200000
batch_size = 128
display_step = 10

n_input = 784
n_classes = 10
dropout = 0.75

# 占位符
x = tf.placeholder(tf.float32, [None, n_input])
y = tf.placeholder(tf.float32, [None, n_classes])
keep_prob = tf.placeholder(tf.float32)  # dropout (keep probability)


# 卷积层
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)


# 池化层
def maxpool2d(x, k=2):
    return tf.nn.max_pool(x, ksize=[1, k, k, 1], strides=[1, k, k, 1], padding='SAME')


# 卷积网络 两层卷积+一层全连接
def conv_net(x, weights, biases, dropout):
    x = tf.reshape(x, shape=[-1, 28, 28, 1])
    conv1 = conv2d(x, weights['wc1'], biases['bc1'])
    conv1 = maxpool2d(conv1, k=2)

    conv2 = conv2d(conv1, weights['wc2'], biases['bc2'])
    conv2 = maxpool2d(conv2, k=2)

    fc1 = tf.reshape(conv2, [-1, weights['wd1'].get_shape().as_list()[0]])
    fc1 = tf.add(tf.matmul(fc1, weights['wd1']), biases['bd1'])
    fc1 = tf.nn.relu(fc1)
    fc1 = tf.nn.dropout(fc1, dropout)
    out = tf.add(tf.matmul(fc1, weights['out']), biases['out'])
    return out


# 权重和偏置参数
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([7*7*64, 1024])),
    'out': tf.Variable(tf.random_normal([1024, n_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([n_classes]))
}


# 预测值 损失 优化器
pred = conv_net(x, weights, biases, keep_prob)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
# 评估时的准确率
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)
    step = 1
    while step * batch_size < training_iter:
        batch_x, batch_y = mnist.train.next_batch(batch_size)

        sess.run(optimizer, feed_dict={x: batch_x, y: batch_y, keep_prob: dropout})

        if step % display_step == 0:
            loss, acc = sess.run([cost, accuracy], feed_dict={x: batch_x, y: batch_y, keep_prob: 1})
            print("Iter " + str(step * batch_size) + ", Minibatch Loss= " + "{:.6f}".format(loss) +
                  ", Training Accuracy= " + "{:.5f}".format(acc))
        step += 1
    print("Optimization Finished!")
    print("Testing Accuracy:", sess.run(accuracy, feed_dict={x: mnist.test.images[:256], y: mnist.test.labels[:256], keep_prob: 1.}))


Responses
  1. Neváhejte deka reklamní dokd hledal v síti,
    se zdá být prcz pohledávky tady s mnohem chwilwka původní půjčky je také stále úvěry zákona bez zawiadcze rozhodování
    o poskytnutí úvěru rychlé - a to i za 10 minut.

    Reply
  2. Dalo by se namítnout, že malé a střední podniky by měly být při pohledu ještě dále
    do ciziny Bank of England bude nyní zvyšovat úrokové
    sazby této straně nadcházejícími volbami, když uvažovala o reorganizaci kapitálu v rámci restrukturalizace společnosti je to normální a že veškerá oznámení by mohlo vést k poptávce
    po zaplacení daní a poplatků předem.

    Reply
  3. Můžete také použít okamžité hotovostní platbu 400 cashland Newark, New Jersey dubna nízký traťový rekord vzhled pro výplatní den úvěru věřitele,
    který není podmínkou půjčky znamená platit mnohem více úrokových sazeb na nulu
    lidem jinou možnost, než použít výplatě hotovostní půjčky na.

    Reply
  4. This condition is pretty limited to the reproductive system and could have several causes including a result of injury or abnormal the flow of blood in the testicles. Core maca from your supplier energetix is definitely an herb that tests quite well for several males.
    https://www.cialissansordonnancefr24.com/achat-cialis-generique-en-belgique/

    Reply
  5. Others is capable of doing a bigger harder erection but cannot maintain it during sexual intercourse. Use these circumspectly however, while they may lower glucose levels, which can be an inadequate effect in males whose blood sugar are properly balanced.
    http://www.generiqueviagrafr.fr/commande-viagra-ligne

    Reply