【问题标题】:MNIST-like issue. Convolutional Neural Network类似 MNIST 的问题。卷积神经网络
【发布时间】:2023-06-19 20:04:01
【问题描述】:

这对某些人来说应该很容易,但我对 Tensorflow 有点陌生,我的所有研究都让我接触到了数千行 git,我只是好奇是否有适合初学者的更简单的替代方案。我有一个想法,它输入一个 200x260 彩色图像并输出一个 1-10 之间的单热向量。我意识到它与 MNIST 非常相似,但 Tensorflow 没有任何关于 mnist 库如何将其图像转换为可用形式的文档。有没有人有任何想法将大约 200 张图像的文件夹(是的,我知道,很小)变成可用的形式?我已经有了我的 one-hot 向量。另外,我将占位符形状设置为tf.placeholder(tf.float32,[None, 200, 260, 3]) 可以吗?我真的更喜欢保持颜色。感谢您的任何提示!

【问题讨论】:

    标签: tensorflow machine-learning neural-network computer-vision mnist


    【解决方案1】:

    首先,您可以使用imreadskimage 导入所有图像

    例如:

    my_image = skimage.io.imread('./path/myimage.png')
    

    然后,如果它们都在您想要的大小 (200x260) 中,那么您可以通过将它们除以 255 来标准化它们(标准化为 0 和 1 之间的值)。如果没有,您可以使用skimage 中的resize,这将自动为您调整图像大小和标准化。

    例如

    my_image = skimage.transform.resize(my_image, (200, 260))
    

    要对其进行可视化,您可以使用matplotlib.pyplot 中的imshow 来绘制图像。

    为了方便next_batch获取下一批内置在Tensorflow中的函数,可以使用以下代码

    i = 0
    def next_batch(batch_size):
        x = training_images[i:i + batch_size]
        y = training_labels[i:i + batch_size]
        i = (i + batch_size) % len(training_images)
        return x, y
    

    然后您可以创建 CNN 并训练图像。您为X 创建的占位符看起来不错。

    【讨论】:

    • 哇。这是我得到的最快的回应。正是我一直在寻找的东西。非常感谢。
    • 没问题,我也添加了一些示例代码
    • 更好。 :)
    • 我用 skimage 开始了一个小测试,我使用 pip 下载了它(然后网站尝试修复错误),但不幸的是我收到了错误Traceback (most recent call last): File "imgtest.py", line 4, in <module> image = skimage.io.imread('./shoes/1.jpg') AttributeError: module 'skimage' has no attribute 'io'任何想法?
    • 似乎我能够用 scipy.misc 获得类似的东西。一切顺利!
    【解决方案2】:

    一开始我也为此苦苦挣扎,但我知道将数据导入 tensorflow 的最佳方法是将图像转换为 tfRecord 格式。特别是如果您有一个不适合 RAM 的大型数据集。这样,tensorflow 可以根据需要加载您的数据(您需要提供输入函数来将文件转换回来)。 虽然这可能不是/肯定不是最简单的方法,但从长远来看,如果您想添加更多图像,它可能是最好的。

    最简单的方法是使用枕头或任何其他图像库(我假设您使用 tensorflow 和 python)加载您的图像,并在运行会话时将它们交给 tensorflow。

    【讨论】:

    • 这很有趣。我一定会尝试一下,因为这个实验是成功的。我想我会研究更大的数据集,所以这肯定会有所帮助。谢谢!
    最近更新 更多