首页 > 解决方案 > 为 CIFAR100 使用 softmax 完全连接网络

问题描述

我正在尝试使用带有 softmax 的 CIFAR 100 数据集构建一个完全连接的层,并打印准确度、学习曲线和一些最终结果——图片及其真实标签和预测标签。我有以下 mnist 数据集的代码,我面临的问题是如何对我的数据集应用相同的东西,我将尝试在下面解释我的问题:

      #initialization
    X=tf.placeholder(tf.float32, [None, 28, 28, 1])
    w=tf.Variable(tf.zeros([784, 10]))
    b=tf.Variable(tf.zeros([10]))
    init=tf.global_variables_initializer()
    #model
    Y=tf.nn.softmax(tf.matmul(tf.reshape(X,[-1, 784]), w)+b)
    #place holder for correct answer
     Y_=tf.placeholder(tf.float32, [None, 10])
    #loss function
     cross_entropy= -tf.reduce_sum(Y_ * tf.log(Y))
     # % of correct answers found in batch
    is_correct=tf.equal(tf.argmax(Y,1), tf.argmax(Y_,1))
    accurancy= tf.reduce_mean(tf.cast(is_correct,tf.float32))
    #training step
    optimizer=tf.train.GradientDescentOptimizer(0.003)
    train_step=optimizer.minimize(cross_entropy)

    sess=tf.Session()
    sess.run(init)
    for i in range(10000):
    #load batch of images and correct answer
       batch_x, batch_Y=mnist.train.next_batch(100)
    train_data={X: batch_x, Y_:batch_y}
     #train
     sess.run(train_step, feed_dict=train_data)

    a,c=sess.run([accurancy, cross_entropy], feed=train_data)

   test_data={X:mnist.test.images, Y_:mnist.test.lables}
   a,c=sess.run([accurancy, cross_entropy], feed=test_data)    

我已经下载了 CIFAR-100 数据集。CIFAR-100 数据集由 60000 个 32x32 彩色图像组成。它有 100 个类,每个类包含 600 张图像。每个类有 500 个训练图像和 100 个测试图像。CIFAR-100 中的 100 个类分为 20 个超类。每个图像都带有一个“精细”标签(它所属的类)和一个“粗略”标签(它所属的超类)。

我只使用了 2 个超类“水生哺乳动物”和“花卉”,每个都有 5 个子类别

这是一些代码:

def unpickle(file):
import pickle
with open(file, 'rb') as fo:
    dict = pickle.load(fo, encoding='bytes')
return dict

# loading train data
data = unpickle('train')
train_data, label_train_data = filter_train(data, 5000)
label_train_data = relabel(label_train_data)

# loading test data
data2 = unpickle('test')
test_data, label_test_data = filter_train(data2, 1000)
label_test_data = relabel(label_test_data)

filter_train 只是我用来填充 2 个超类“水生哺乳动物”和“花卉”的函数

我知道 mnist.train.next_batch(batch_size=100) 意味着它从 MNIST 数据集中随机挑选 100 个数据

所以我的问题是如何交换

batch_x, batch_Y=mnist.train.next_batch(100)

和:

  test_data={X:mnist.test.images, Y_:mnist.test.lables}

为了让我可以访问我的 CIFAR 数据集的训练数据和测试数据,我一直在尝试用 train_data、label_train_data 和 test_data、label_test_data 替换这些行,但它似乎不起作用,我找不到任何其他方法去那些集。任何hely将不胜感激

标签: pythontensorflowneural-network

解决方案


推荐阅读