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_output
data
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などについても同様です。4
9
これらを 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 であるため、コードは機能しているようです。
しかし、私は自分の運を押し上げているかもしれません。ケラスはそれを考慮しますか
numpy.zeros(...)
ストライドは異常な値を取る場合があり、特に作成するものよりも小さい- データ内の異なる要素が同じメモリを参照している可能性があります
- 入力の要素は、出力の同じメモリ要素を参照する場合があります。
すべてのウィンドウを個別に具体化するという代替案や、代替ライブラリを使用して回答しないでください。
このまま Keras を使っても安全なのか、データが完全に実体化した時と同じ結果になるのか知りたいです。回答がバックエンドに依存する場合は、両方のバックエンド (Theano / Tensorflow) について回答してください。