5

を使用して、Theano 0.7(ノートブックで) GPU でニューラル ネットワークをトレーニングしています。ただし、最初のレイヤー ( ) のため、次のネットワークは数時間待ってもトレーニングを開始しません。nolearn 0.6adevlasagne 0.2.dev1IPython 3.2.1'reduc'

import theano
from lasagne import layers
from lasagne.updates import nesterov_momentum
from nolearn.lasagne import NeuralNet
from nolearn.lasagne import BatchIterator
from lasagne import nonlinearities
from lasagne import init
import numpy as np

testNet = NeuralNet(
    layers=[(layers.InputLayer, {"name": 'input', 'shape': (None, 12, 1000, )}),

            (layers.Conv1DLayer, {"name": 'reduc', 'filter_size': 1, 'num_filters': 4, 
                                  "nonlinearity":nonlinearities.linear,}),

            (layers.Conv1DLayer, {"name": 'conv1', 'filter_size': 25, 'num_filters': 100,
                                 'pad': 'same', }),
            (layers.MaxPool1DLayer, {'name': 'pool1', 'pool_size': 5, 'stride': 3}),



            (layers.Conv1DLayer, {"name": 'conv2', 'filter_size': 15, 'num_filters': 100,
                                 'pad': 'same', 
                                  'nonlinearity': nonlinearities.LeakyRectify(0.2)}),

            (layers.MaxPool1DLayer, {'name': 'pool2', 'pool_size': 5, 'stride': 2}),

            (layers.Conv1DLayer, {"name": 'conv3', 'filter_size': 9, 'num_filters': 100,
                                 'pad': 'same', 
                                  'nonlinearity': nonlinearities.LeakyRectify(0.2)}),

            (layers.MaxPool1DLayer, {'name': 'pool3', 'pool_size': 2}),

            (layers.Conv1DLayer, {"name": 'conv4', 'filter_size': 5, 'num_filters': 20,
                                 'pad': 'same', }),

            (layers.Conv1DLayer, {"name": 'conv5', 'filter_size': 3, 'num_filters': 20,
                                 'pad': 'same',}),


            (layers.DenseLayer, {"name": 'hidden1', 'num_units': 10, 
                                 'nonlinearity': nonlinearities.rectify}),

            (layers.DenseLayer, {"name": 'output', 'nonlinearity': nonlinearities.sigmoid, 
                                 'num_units': 5})
           ],

    # optimization method:
    update=nesterov_momentum,
    update_learning_rate=5*10**(-3),
    update_momentum=0.9,

    regression=True,  
    max_epochs=1000,
    verbose=1,
    )

testNet.fit(np.random.random([3000, 12, 1000]).astype(np.float32), 
            np.random.random([3000, 5]).astype(np.float32))

最初のレイヤーをコメントアウトすると、トレーニングは数秒で開始されます。より複雑なネットワークのトレーニングも問題ではありません。問題の原因について何か考えはありますか?

編集:奇妙なことに、 and を削除するconv4conv5、トレーニングも妥当な時間内に開始されます。

Edit2 :さらに奇妙なのは、レイヤーでフィルターのサイズを 10 に変更するとreduc、トレーニングが妥当な時間内に開始されることです。その後、セルの実行を停止し、この値を 1 に変更してセルを再実行すると、トレーニングはうまくいきます...

最後に、私は別のフレームワークを使い始めましたが、誰かが興味を持っている場合は、ラザニア ユーザー グループで開始したスレッドへのリンクを次に示します。

4

0 に答える 0