keras是否支持自定义numpy步伐?

时间:2016-04-06 16:45:53

标签: python-3.x numpy tensorflow theano keras

考虑一维numpy数组。可以通过改变阵列的形状和步幅来模拟该阵列上的滑动窗口。例如,考虑我们应用两个滑动窗口的半抛物线:

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])]

请注意,上面显示的2 1指的是相同的内存。也就是说,我们创建了一个滑动窗口视图而不是副本。所有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。

然而,我可能会推动我的运气。 Keras是否认为

  1. 步幅可能会采用不寻常的值,特别是小于numpy.zeros(...)创建的值
  2. 数据中的不同元素可能指的是同一个内存
  3. 输入中的元素可以指输出中的相同内存als元素。
  4. 请不要单独使用替代方法来回答所有窗口,也不要使用其他库。

    我想知道使用这样的Keras是否安全,以及结果是否与数据完全实现时的结果相同。如果答案取决于后端,请回答后端(Theano / Tensorflow)。

0 个答案:

没有答案