-
Notifications
You must be signed in to change notification settings - Fork 174
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Веса нейросети почти не меняются в процессе обучения #42
Comments
Ссылка на ноутбук с кодом: https://github.com/KirillMouraviev/Data-Mining-in-action/blob/master/hw4/cifar.ipynb |
такая же проблема, нашел решение? |
Привет, фильтр сайз 10 это плохо. Тем более всего один слой. Попробуй так input_x, target_y = T.tensor4("Input value"), T.vector("Target value", dtype='int32')
net = layers.InputLayer(input_shape, input_x, name='Input')
net = Conv(net, 32, 5, pad=2)
net = layers.MaxPool2DLayer(net, 3, stride=2)
net = Conv(net, 64, 5, pad=2)
net = layers.MaxPool2DLayer(net, 3, stride=2)
net = Conv(net, 128, 5, pad=2)
net = layers.MaxPool2DLayer(net, 3, stride=2)
net = Dence(net, 100, **kwargs)
net = Dence(net, 100, **kwargs)
net = Dence(net, 10, nonlinearity=softmax, **kwargs) |
То же самое. Кажется, я все-таки неправильно передаю данные |
С любыми параметрами сети происходит примерно такое: |
Метод обновления весов adadelta работает! Он достигает accuracy 30-40% за 4-5 эпох (дальше пока не запускал). Всё остальное из lasagne.updates не увеличивает accuracy никак за десятки эпох |
Кажется, cifar очень чувствителен к методу обучения и learning rate в отличии от mnist, на котором почти любая адекватная нейросеть показвыает over95% |
adam и регуляризация l2 - 65 |
У меня такая же проблема, запускал вот этот ноутбук: https://github.com/jseppanen/cifar_lasagne/blob/master/cifar_lasagne.ipynb |
Автор запускал данный ноутбук на GPU, и у него 88 с. работает. На GPU сверточные нейросети обучаются раз в 7 быстрее, чем на CPU, поэтому 600-700 секунд - нормальное время |
Столкнулся с той же проблемой. На виртуальной машине поднята Ubuntu 16.04 (g++-5), с самого начала обучения training loss сразу мал (~2.30), а точность 10%, перепробовал все методы обновления, adadelta, о котором писали выше, не помогает. Не обучаются даже сети на denselayer (что очень странно: обучаются сети только без скрытых слоев, как только добавляю скрытый - тот же баг). Тот же ноутбук на Ubuntu Xerus 16.10 ругался на неустановленный g++ и категорически не запускался с последней его версией (g++-6). Гугл подсказал, что надо поставить g++-5. Как итог, работают dense layer (только без скрытых слоев), maxpool, не работают сверточные слои с ошибкой Method not found "perform". Были у кого-то похожие проблемы? |
Я использую сверточную нейросеть со следующей архитектурой:
input_layer = lasagne.layers.InputLayer(shape=(None, 3, 32, 32), input_var=input_X)
conv1 = lasagne.layers.Conv2DLayer(input_layer, num_filters = 16, filter_size = (10, 10))
pool1 = lasagne.layers.MaxPool2DLayer(conv1, pool_size = (2, 2))
dense1 = lasagne.layers.DenseLayer(pool1, num_units = 50, nonlinearity = sigmoid)
dense_output = lasagne.layers.DenseLayer(dense1, num_units = 10, nonlinearity=softmax)
Все функции для обучения скопированы с домашки 3 (mnist). Там свертка с примерно такой же архитектурой работает прекрасно (98.5-98.6%).
Когда ставлю ее обучаться на датасете cifar, loss меняется лишь в пределах 10^(-4), а качество на трейне и тесте не меняется за 100 эпох никак, оставаясь на уровне около 10%. Правильность передачи данных на вход нейросети проверял (когда передача была неправильной, качество скакало на уровне 10 +- 1%, а как исправил - перестало меняться). Не подскажете, с чем это может быть связано?
The text was updated successfully, but these errors were encountered: