机器学习输入和输出的大小

时间:2016-11-30 08:06:10

标签: python machine-learning

目前我在基于this website的python中使用机器学习(第二部分是关于图像识别)。我想训练一个网络来识别上午图像中的4个特定点,但我的问题是:

通过简单地将矩阵相乘来计算神经网络,计算给定输出和识别输出之间的差值,并重新计算矩阵中的权重。现在让'说我有一个600x800像素图像作为输入。如果我将其与我的图层矩阵相乘,我无法获得4x2矩阵作为输出(每个点x,y)。

我的第二个问题是我应该为这个问题隐藏多少层?更多层总是更好,但需要更长时间来计算?我们可以猜测我们需要多少隐藏层,或者我们应该测试一些值并使用最好的值吗?

我当前的神经网络代码:

from os.path import isfile
import numpy as np

class NeuralNetwork:

    def __init__(self):
        np.random.seed(1)
        self.syn0 = 2 * np.random.random((480000,8)) - 1

    @staticmethod
    def relu(x, deriv=False):
        if(deriv): 
            res = np.maximum(x, 0)
            return np.minimum(res, 1)
        return np.maximum(x, 0)

    def train(self, imgIn, out):
        l1 = NeuralNetwork.relu(np.dot(imgIn, self.syn0))

        l1_error = out - l1

        exp = NeuralNetwork.relu(l1,True)
        l1_delta = l1_error * exp

        self.syn0 += np.dot(imgIn.T,l1_delta)
        return l1 #np.abs(out - l1)

    def identify(self, img):
        return NeuralNetwork.relu(np.dot(imgIn, self.syn0))

1 个答案:

答案 0 :(得分:1)

问题1.输入数据。

您必须序列化输入。例如,如果您有一个600 * 800像素的图像,则输入必须为1 * 480000(行,列)。 行表示数据的数量,列表示数据的维度。

问题2.分类。

如果要对4种不同类别进行分类,则应使用(1,4)向量进行输出。例如,有4个类('Fish','Cat','Tiger','Car')。然后vector(1,0,0,0)表示Fish。

问题3.完全连接的网络。

我认为此主页中的示例使用完全连接的网络。它使用整个图像进行一次分类。如果要对图像子集进行分类。你应该使用卷积神经网络或其他方法。我对此并不了解。

问题4.超参数

这取决于数据。你必须测试各种超级参数。然后选择最佳超参数。