我注意到在 Andrew Ng 深度学习课程中,对于图像分析,他总是有X_train形状为 的矩阵[height, width, 3, num_inputs],或者,如果是扁平的,则为[height X width X 3, num_inputs]. 他也有他的y_trainas [1, num_inputs]。对我来说,翻转这些更直观,所以X_trainis[num_inputs, height X width X 3]和y_trainis [num_inputs, 1]。是否有任何动机或理由证明他必须这样做,还是只是偏好?这是一个标准还是有所不同?
训练/测试集的矩阵形状是否必须按特定顺序排列?
数据挖掘
机器学习
神经网络
深度学习
2022-03-04 22:22:14
2个回答
在实践中
Andrew Ng 似乎正在使用 Theano 框架上的约定。如果您有 10 个彩色图像,每个 100 像素高和 200 像素宽,Theano 模型将期望输入以下形式:
(批量大小、输入通道、输入行、输入列)
等尺寸:(10, 3, 100, 200)。三是因为彩色图像中的三个 RGb 维度。
另一方面, Tensorflow颠倒此顺序,改为使用:(num_obs, height, width, channels) - 对于与上面相同的示例,这将变为:
(批量大小、输入行、输入列、输入通道)
意思是输入的尺寸应该是(10, 100, 200, 3).
Keras 与 Tensorflow 和 Theano 一起工作,并通过简单地允许用户设置给出通道数的位置来支持这两种约定。这可以在配置文件中设置,也可以在设置时使用特定的环境变量。看看相关文档。
(可能的)理由
对于什么更自然,有不同的观点。如果您来自计算机视觉领域(或一般的图像处理),那么像OpenCV这样的库使用图像左上角的坐标系,(0,0)您可以通过给定垂直移动和水平移动来指定单个像素从原点。这意味着你先给出一个高度,然后给出一个宽度。这样做的一个理由可能是许多计算机视觉算法(例如滤色器)关注图像通道之间的差异,但这只是惯例。
在一般的绘图和数学中,通常先给出X坐标,然后给出Y坐标,这意味着谈论水平运动,然后是垂直运动。一般来说,线性代数就是一个很好的例子。
综上所述,最好的建议是确保根据您使用的软件的文档使用正确的尺寸。如果您制作自己的软件 - 您可以选择!(但一定要记录下来!)
这取决于你使用的深度学习框架,你必须使用框架的功能使用的形状。我认为 Tensorflow 和 Pytorch 是不同的。建议是在执行框架文档中的任何操作之前进行检查。