在Tensorflow中调整MNIST的大小

时间:2017-07-11 02:21:05

标签: resize mnist

我一直在研究MNIST数据集,以学习如何在我的深度学习课程中使用Tensorflow和Python。

我想将MNIST调整为22& 22使用张量流,然后我训练它,但我不怎么办?

你能帮帮我吗?

4 个答案:

答案 0 :(得分:1)

您尝试过tf.image.resize_image吗?

方法:

resize_images(images, size, method=ResizeMethod.BILINEAR,
    align_corners=False)

其中图像是一批图像,大小是矢量张量,它决定了新的高度和宽度。您可以在此处查看完整文档:https://www.tensorflow.org/api_docs/python/tf/image/resize_images

答案 1 :(得分:1)

TheRevanchist的回答是正确的。但是,对于mnist数据集,首先需要重新整形mnist数组,然后再将其发送到tf.image.resize_images()

import tensorflow as tf
import numpy as np
import cv2

mnist = tf.contrib.learn.datasets.load_dataset("mnist")

batch = mnist.train.next_batch(10)
X_batch = batch[0]
batch_tensor = tf.reshape(X_batch, [10, 28, 28, 1])
resized_images = tf.image.resize_images(batch_tensor, [22,22])

上面的代码取出一批10个mnist图像,并将它们从28x28图像重新整形为22x22张量流图像。

如果要显示图像,可以使用opencv和下面的代码。 resized_images.eval()将张量流图像转换为numpy数组!

with tf.Session() as sess:
    numpy_imgs = resized_images.eval(session=sess) # mnist images converted to numpy array
    for i in range(10):
        cv2.namedWindow('Resized image #%d' % i, cv2.WINDOW_NORMAL)
        cv2.imshow('Resized image #%d' % i, numpy_imgs[i])
        cv2.waitKey(0)

答案 2 :(得分:0)

  • 您可以使用 opencv
  • cv2.resize()功能
  • 使用for循环遍历每个图像
  • 在每个图片的for循环内添加此行cv2.resize(source_image, (22, 22))

    def resize(mnist):
         train_data = []
         for img in mnist.train._images:
                resized_img = cv2.resize(img, (22, 22))
                train_data.append(resized_img)
         return train_data
    

答案 3 :(得分:0)

更新:TensorFlow 2.4.1


简答

使用 tf.image.resize(而不是 resize_images)。其他提供的链接不再存在。更新了 link


长答案

MNIST 中的

tf.keras.datasets.mnist 是以下形状

(batch_size, 28 , 28)

这是完整的实现。请阅读代码随附的评论。

(x_train, y_train), (_, _) = tf.keras.datasets.mnist.load_data()

# expand new axis, channel axis 
x_train = np.expand_dims(x_train, axis=-1)

# [optional]: we may need 3 channel (instead of 1)
x_train = np.repeat(x_train, 3, axis=-1)

# it's always better to normalize 
x_train = x_train.astype('float32') / 255

# resize the input shape , i.e. old shape: 28, new shape: 32
x_train = tf.image.resize(x_train, [32,32]) # if we want to resize 

print(x_train.shape)
# (60000, 32, 32, 3)