神经网络与我自己的数据集

时间:2017-03-28 21:39:56

标签: tensorflow neural-network deep-learning

我从网上下载了很多脸部图像。为了学习Tensorflow,我想将这些图像提供给一个带有单个隐藏层的简单的全连接神经网络。我在here中找到了一个示例代码。

由于我是初学者,我不知道如何使用下载的图像训练,评估和测试网络。代码所有者使用了'.mat'文件和.pkl文件。我不明白他是如何组织训练和测试的。

为了用我的图像运行代码; 我是否需要将图像划分为训练,测试和验证文件夹,并将每个文件夹转换为mat文件?我如何为培训提供标签?

此外,我不明白他为什么使用'.pkl'文件?

总而言之,我想更改此代码,以便我可以使用我的图像数据集找到测试,培训和验证集分类性能。

这可能是一个简单的问题,但对我来说这很重要,因为它是一个开始步骤。谢谢你的理解。

1 个答案:

答案 0 :(得分:1)

首先,您不必使用.mat文件也不必使用泡菜。 Tensorflow预计numpy array

例如,假设您有70000张尺寸为28x28(= 784维)的图像属于10个类。我们还假设你想训练一个简单的前馈神经网络来对图像进行分类。

第一步是在火车和测试之间分割图像(和验证,但为了简单起见,我们暂且不谈)。为了举例,我们假设您为训练集选择随机 60000图像,为测试集选择10000图像。

第二步将确保您的数据格式正确。在这里,您希望您的训练集包含一个用于图像的numpy形状(60000, 784)和用于标签的另一个形状(60000, 10)(如果您使用单热编码来表示您的类)。对于您的测试集,您应该为图像添加一个形状(10000, 784)的数组,并为标签创建一个形状为(10000, 10)的数组。

一旦你拥有了这些大型numpy阵列,就应该定义placeholders,这样你就可以在训练和评估过程中向你的网络提供数据。

images = tf.placeholder(tf.float32, shape=[None, 784])
labels = tf.placeholder(tf.int64, shape=[None, 10])

这里的None意味着您可以提供任意大小的批次,即您想要的任意数量的图片,只要您的数组具有(anything, 784)形状。

第三步包括定义模型以及损失函数和优化器。

第四步包括使用上面创建的占位符为随机批量数据提供网络培训。在您的网络进行培训时,您可以定期打印其性能,如训练损失/准确性以及测试损失/准确性。

您可以找到一个完整且非常简单的示例here