Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何增加神经网络可以识别的图像范围?_Python_Neural Network_Pytorch_Conv Neural Network - Fatal编程技术网

Python 如何增加神经网络可以识别的图像范围?

Python 如何增加神经网络可以识别的图像范围?,python,neural-network,pytorch,conv-neural-network,Python,Neural Network,Pytorch,Conv Neural Network,我正在用Pytork开发一个图像识别神经网络。我的目标是拍摄手写数学方程式的照片,对其进行处理,并使用神经网络识别每个元素。我已经到了可以从方程中分离出每个变量、数字或符号的地步,一切都可以通过神经网络发送。我已经训练了我的网络来很好地识别数字(这部分很简单),但是现在我想把神经网络的范围扩大到识别字母和数字。我把手写的字母和数字一起装入张量,将元素混洗,然后分批放入。无论我如何改变我的学习速度,我的架构(隐藏层和每层神经元的数量),或者我的批量大小,我都无法让神经网络识别字母 这是我的网络架构

我正在用Pytork开发一个图像识别神经网络。我的目标是拍摄手写数学方程式的照片,对其进行处理,并使用神经网络识别每个元素。我已经到了可以从方程中分离出每个变量、数字或符号的地步,一切都可以通过神经网络发送。我已经训练了我的网络来很好地识别数字(这部分很简单),但是现在我想把神经网络的范围扩大到识别字母和数字。我把手写的字母和数字一起装入张量,将元素混洗,然后分批放入。无论我如何改变我的学习速度,我的架构(隐藏层和每层神经元的数量),或者我的批量大小,我都无法让神经网络识别字母

这是我的网络架构和前馈功能(你可以看到我尝试了隐藏层的数量):

这是训练代码块(数据在数据加载器中洗牌,基本事实按相同顺序洗牌,批量大小为10,总数字字母和数字数据点为244800):


提前谢谢你的帮助

我建议的第一件事是编写一个干净的Pytorch代码

例如,
如果我看到你的神经网络类,它应该有
forward
方法(小写为f), 这样您就不会使用
prediction=neuralNet.Forward(dataSet)
调用它。如果您使用
prediction=neuralNet.Forward(dataSet)
,则无法调度来自神经网络的钩子。 有关更多详细信息,请参阅


第二件事是:由于您的数据集不平衡……请尝试使用欠采样/过采样方法,这对您的情况非常有帮助。

这很可能不是因为代码不正确,所以它不属于so。但您可能应该使用更先进的神经网络,具有卷积层和batchnorm等等。寻找最佳MNIST结果,并尝试在数据集上复制它。此外,您的数据集平衡程度如何?如果某些类明显占主导地位,这将对您的结果产生负面影响OK,谢谢您提供的信息。我有大约60000个手写数字数据点和大约184800个字母,包括大写和小写字母。我将准确地检查每个字母中有多少字母,并根据这些字母确定我的数据集是否存在问题。再次感谢
class NeuralNetwork(nn.Module):

def __init__(self):

    super().__init__()
    inputNeurons, hiddenNeurons, outputNeurons = 784, 700, 36

    # Create tensors for the weights
    self.layerOne = nn.Linear(inputNeurons, hiddenNeurons)
    self.layerTwo = nn.Linear(hiddenNeurons, hiddenNeurons)
    self.layerThree = nn.Linear(hiddenNeurons, outputNeurons)
    #self.layerFour = nn.Linear(hiddenNeurons, outputNeurons)
    #self.layerFive = nn.Linear(hiddenNeurons, outputNeurons)

# Create function for Forward propagation
def Forward(self, input):

    # Begin Forward propagation
    input = torch.sigmoid(self.layerOne(torch.sigmoid(input)))
    input = torch.sigmoid(self.layerTwo(input))
    input = torch.sigmoid(self.layerThree(input))
    #input = torch.sigmoid(self.layerFour(input))
    #input = torch.sigmoid(self.layerFive(input))

    return input
neuralNet = NeuralNetwork()
params = list(neuralNet.parameters())
criterion = nn.MSELoss()
print(neuralNet)

dataSet = next(iter(imageDataLoader))
groundTruth = next(iter(groundTruthsDataLoader))

for i in range(15):

    for k in range(24480):

        neuralNet.zero_grad()

        prediction = neuralNet.Forward(dataSet)
        loss = criterion(prediction, groundTruth)
        loss.backward()

        for layer in range(len(params)):

            # Updating the weights of the neural network
            params[layer].data.sub_(params[layer].grad.data * learningRate)