目前,我正在开发一个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]
。
所以,我的问题:
[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
答案 0 :(得分:1)
如果要重新排序的列表是4个元素的序列,那么你应该使用(BatchSize, 4, ?)
的形状,如果它们是类,甚至只是原始的?
可以是10如果数字是实际数字值/强度,则编号。