目前我在基于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))
答案 0 :(得分:1)
问题1.输入数据。
您必须序列化输入。例如,如果您有一个600 * 800像素的图像,则输入必须为1 * 480000(行,列)。 行表示数据的数量,列表示数据的维度。
问题2.分类。
如果要对4种不同类别进行分类,则应使用(1,4)向量进行输出。例如,有4个类('Fish','Cat','Tiger','Car')。然后vector(1,0,0,0)表示Fish。
问题3.完全连接的网络。
我认为此主页中的示例使用完全连接的网络。它使用整个图像进行一次分类。如果要对图像子集进行分类。你应该使用卷积神经网络或其他方法。我对此并不了解。
问题4.超参数
这取决于数据。你必须测试各种超级参数。然后选择最佳超参数。