【问题标题】:Data prepartion for a Neural Network (List as input and output). Recommendation is needed [closed]神经网络的数据准备(列表作为输入和输出)。需要推荐[关闭]
【发布时间】:2018-02-26 23:28:15
【问题描述】:

目前,我正在处理一个需要重新排序列表的 DP 项目,例如:

input_list = [1, 1, 2, 2]
output_list = [1, 2, 1, 2]

所以,我已经使用 Keras 的 to_categorical 函数对我的输入和输出列表进行了编码:

X = to_categorical(input_list, num_classes=10)
X
array([[ 0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]])

在我将它们重塑为 3D 形状后(对于 LSTM):

X = X.reshape(1,4,10)
y = y.reshape(1,4,10)

对于损失函数和指标,我使用 binary_crossentropyF1

我的问题是准确性。有时我得到 f.e.列表中的数字错误:

y_out 是[1,2,2,2],但我需要[1,2,1,2]

那么,我的问题

  • 对我的项目使用 to_categorical 编码数据是个好主意吗?
  • 度量和损失函数呢?我应该尝试其他方法吗?
  • 我真的很喜欢这种类型的错误 -> 我的 y_out 是[1,2,2,2],但我需要[1,2,1,2]有什么办法克服它吗?
  • 另外,如果你知道类似的项目,请分享你的知识。

欢迎任何反馈:)

关于我的项目的一些额外数据:

代码:

    from keras.models import Sequential
    from keras.layers import Dense
    import numpy as np

    model = Sequential()
    model.add(Bidirectional(GRU(32, return_sequences=True), input_shape=(None, 1)))
    model.add(Dense(30, activation='elu'))
    model.add(BatchNormalization())
    model.add(Dense(1, activation='sigmoid', kernel_initializer='normal', use_bias=True))
    model.compile(loss='binary_crossentropy', optimizer=keras.optimizers.Adam(lr=0.001), 
              metrics=[f1])
    model.fit(a, y, epochs=5000, batch_size=500, callbacks = callbacks)

我的模型总结


Layer (type)                 Output Shape              Param #   
=================================================================
bidirectional_11 (Bidirectio (None, None, 64)          6528      
_________________________________________________________________
dense_18 (Dense)             (None, None, 30)          1950      
_________________________________________________________________
batch_normalization_8 (Batch (None, None, 30)          120       
_________________________________________________________________
dense_19 (Dense)             (None, None, 1)           31        
=================================================================
Total params: 8,629
Trainable params: 8,569
Non-trainable params: 60

【问题讨论】:

  • 答案完全取决于“什么”是您的数据。
  • @DanielMöller 列表,正如我在开头所展示的那样。 F.e.我有输入列表 [1, 1, 1, 2, 2, 3] 并希望在我的网络输出中获得类似 [ 1, 1, 2, 3, 2, 1] 的内容。

标签: python machine-learning deep-learning keras normalization


【解决方案1】:

如果您要重新排序的列表是 4 个元素的序列,那么您应该真正使用 (BatchSize, 4, ?) 的形状,其中 ? 可以是 10,如果它们是类,或者甚至只是原始数字,如果数字是一个实际的数值/强度。

【讨论】:

  • 实际上,这正是我正在做的。问题是如何克服 NN 错误:我的 y_out 是 [1,2,2,2],但我需要 [1,2,1,2]
  • 我已经添加了我的代码
  • 您正在使用 (4,10,1) -- 批量大小 = 4 --- 您的网络认为这 4 个元素之间没有关系。应该是(1, 4, 10),或(AnyNumberOfSequences, 4, 10)
  • 嘿,你是对的,一个不好的例子,在我的网络中我使用这个形状来表示 X (12356, 90, 1),有 12356 是列表的数量,90 是经过 to_categorical 编码的列表。跨度>
  • 我应该去(12356,9,10)吗?
猜你喜欢
  • 1970-01-01
  • 2017-07-25
  • 1970-01-01
  • 2017-06-13
  • 2018-07-28
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
  • 2017-08-09
相关资源
最近更新 更多