神经网络的数据预制(列表作为输入和输出)。建议是必要的

时间:2017-09-18 12:16:07

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

目前,我正在开发一个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_crossentropy F1

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

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

所以,我的问题

  • 为我的项目编写数据编码数据是个好主意吗?
  • 公制和损失功能怎么样?我应该尝试别的吗?
  • 我真的堆积在这种类型的错误上 - >我的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

1 个答案:

答案 0 :(得分:1)

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