2

1D numpy 配列を考えてみましょう。アレイの形状とストライドを変更することで、このアレイでスライディング ウィンドウをシミュレートできます。たとえば、2 つのスライディング ウィンドウを適用する半放物線を考えてみましょう。

data = numpy.arange(20)
data **= 2
item_size = data.itemsize

data_input  = numpy.ndarray(
    buffer  = data.data,
    dtype   = data.dtype,
    shape   = (data.shape[0] - 4 + 1, 2),
    strides = (item_size, item_size),
    offset  = 0
)

data_output  = numpy.ndarray(
    buffer  = data.data,
    dtype   = data.dtype,
    shape   = (data.shape[0] - 4 + 1, 2),
    strides = (item_size, item_size),
    offset  = 2 * item_size
)

ここで、 の各行には、 で互いに先行data_inputする一致する行があります。あれは:data_outputdata

list(zip(data_input.tolist(), data_output.tolist()))

出力は、入力と出力の行のタプルであり、すぐにニューラル ネットワークを当てはめます。

[([  0,   1], [  4,   9]),
 ([  1,   4], [  9,  16]),
 ([  4,   9], [ 16,  25]),
 ([  9,  16], [ 25,  36]),
 ([ 16,  25], [ 36,  49]),
 ([ 25,  36], [ 49,  64]),
 ([ 36,  49], [ 64,  81]),
 ([ 49,  64], [ 81, 100]),
 ([ 64,  81], [100, 121]),
 ([ 81, 100], [121, 144]),
 ([100, 121], [144, 169]),
 ([121, 144], [169, 196]),
 ([144, 169], [196, 225]),
 ([169, 196], [225, 256]),
 ([196, 225], [256, 289]),
 ([225, 256], [289, 324]),
 ([256, 289], [324, 361])]

1上記の 2 は同じメモリを参照していることに注意してください。つまり、コピーの代わりにスライディング ウィンドウビューを作成しました。all 、allなどについても同様です。49

これらを Keras ニューラル ネットワークのトレーニングに使用しても安全かどうかを知りたいです。例えば:

from keras.models import Sequential
from keras.layers.core import Dense, Activation
from keras.optimizers import SGD

model = Sequential()
model.add(Dense(output_dim=3, input_dim=2, init="glorot_uniform"))
model.add(Activation('linear'))
model.add(Dense(output_dim=2, input_dim=3, init="glorot_uniform"))
model.add(Activation('linear'))
model.compile(loss='mse', optimizer=SGD(lr=0.000001, momentum=0.9, nesterov=True))

model.fit(data_input, data_output, nb_epoch=100000, batch_size=32, verbose=0)

numpy.sqrt( ((model.predict(data_input) - data_output) ** 2).mean() )

重みは -2 から 2 の間の通常の値を持ち、結果の RMSE は約 0.65 であるため、コードは機能しているようです。

しかし、私は自分の運を押し上げているかもしれません。ケラスはそれを考慮しますか

  1. numpy.zeros(...)ストライドは異常な値を取る場合があり、特に作成するものよりも小さい
  2. データ内の異なる要素が同じメモリを参照している可能性があります
  3. 入力の要素は、出力の同じメモリ要素を参照する場合があります。

すべてのウィンドウを個別に具体化するという代替案や、代替ライブラリを使用して回答しないでください。

このまま Keras を使っても安全なのか、データが完全に実体化した時と同じ結果になるのか知りたいです。回答がバックエンドに依存する場合は、両方のバックエンド (Theano / Tensorflow) について回答してください。

4

0 に答える 0