python - 为 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将不胜感激
解决方案
推荐阅读
- java - 使用 Arrays.deepToString() 从多维数组中的特定索引打印
- c++ - ResharperC++ 建议将方法设为 const
- gcc - gcc 扩展 asm 返回
- javascript - 在 Python 中的 BeautySoup 之后解析脚本标签
- python - 在 python 中使用 zerorpc 对项目进行 dockerizing 时导入错误
- django - 获取 DTL 模板中字符串的特定长度
- excel - Visual Basic 中的 Dim 语句和调用单元格
- typescript - TypeScript - 数组的约束
- amazon-web-services - 使用安装到 Elastic Beanstalk 的 CakePHP 3 中的 DynamoDB
- java - 如何在 swing 中连接到 h2 数据库