Я обучил нейронную сеть, используя pybrain. Но когда я тестирую свою сеть, используя тот же ввод, что и тот, который используется для обучения, я получаю совершенно другой результат. Вот мой кодПочему сеть с синтезированным пирамином дает разные результаты даже при использовании ввода для обучения
from pybrain.structure import FeedForwardNetwork
from pybrain.structure import LinearLayer, SigmoidLayer
from pybrain.structure import FullConnection
import numpy as np
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised import BackpropTrainer
from pybrain.tools.xml.networkreader import NetworkReader
from pybrain.tools.xml.networkwriter import NetworkWriter
from pybrain.utilities import percentError
n = FeedForwardNetwork()
inLayer = LinearLayer(2)
hiddenLayer = SigmoidLayer(3)
outLayer = LinearLayer(1)
n.addInputModule(inLayer)
n.addModule(hiddenLayer)
n.addOutputModule(outLayer)
in_to_hidden = FullConnection(inLayer, hiddenLayer)
hidden_to_out = FullConnection(hiddenLayer, outLayer)
n.addConnection(in_to_hidden)
n.addConnection(hidden_to_out)
n.sortModules()
X = np.array(([3,5], [5,1], [10,2]),dtype=float)
Y = np.array(([75], [82], [93]),dtype=float)
X/=np.amax(X, axis=0)
Y/=100
print(n.activate([ 1, 2]))
print(in_to_hidden.params)
ds = SupervisedDataSet(2,1)
for i in range(len(X)):
ds.addSample(X[i],Y[i])
trainer=BackpropTrainer(n,ds, learningrate=0.5, momentum=0.05,verbose=True)
trainer.trainUntilConvergence(ds)
trainer.testOnData(ds, verbose=True)
Теперь, когда я хочу, чтобы проверить на входе с использованием кода print("Testing",n.activate([3,5]))
я получаю ('Testing', array([ 1.17809308]))
. Я должен был иметь 0.75
для этого ввода n.activate([3,5])
. Поэтому я не понимаю, почему этот странный результат
мой вопрос, почему это дает совершенно другой результат, хотя моя сеть была обучена, пока она не сходится? он должен был иметь значение, близкое к фактическому. я должен указать, что значение, которое я использовал для тестирования, является значением, которое я использовал для обучения. поэтому моя сеть должна была ее распознать. – user3841581
@ user3841581 Вот что я попытался проиллюстрировать графиком регрессии. Вы можете думать о линейной модели как о своей обученной сети. Вы можете видеть, что линия пересекает ни одну из данных обучения, например. прося ответа на пример обучения, даст другой результат, чем вы ожидаете. Я не могу сказать, является ли 1.178 - 0.75 большим расхождением, это зависит от ваших данных (если он колеблется от 1 до 1 мили, ошибка крошечная). Кроме того, сколько примеров данных вы тренируетесь в своей реальной модели? Если это всего 3 очка, то у вас никогда не будет отличной модели. – roganjosh
Я понимаю, нам нужно больше примеров обучения. но моя модель не предполагает получить хороший результат для примера, используемого для его обучения? – user3841581