Python 分类RNN模型构建启发式-无效辩论

Python 分类RNN模型构建启发式-无效辩论,python,tensorflow,keras,recurrent-neural-network,layer,Python,Tensorflow,Keras,Recurrent Neural Network,Layer,我正在尝试训练一个循环网络,它将在三个类别中的一个类别中进行分类预测。我正在尝试修改以前的一些代码,这些代码用于在两个类别之间进行预测。为此,我只是将最后一个Dense()层的形状改为3,而不是2,其他所有内容基本相同 但是,当我运行下面的代码时,我得到了错误: InvalidArgumentError: Received a label value of -9223372036854775808 which is outside the valid range of [0, 3). Lab

我正在尝试训练一个循环网络,它将在三个类别中的一个类别中进行分类预测。我正在尝试修改以前的一些代码,这些代码用于在两个类别之间进行预测。为此,我只是将最后一个Dense()层的形状改为3,而不是2,其他所有内容基本相同

但是,当我运行下面的代码时,我得到了错误:

InvalidArgumentError:  Received a label value of -9223372036854775808 which is outside the valid
range of [0, 3).  Label values:
0 0 0 0 1 1 0 -9223372036854775808 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 1 0 1 0 1
我真的不明白这些数字是从哪里来的,如果有人能解释一下,我将不胜感激?特别是,我还没有找到“标签值”的警告含义

一般来说,我认为在stackoverflow或其他网站上找不到很多关于如何设计为相对初学者设计的网络的深入文章——我对使用Keras还不熟悉,但我的背景是数学,因此跳过数学层的教程我没有发现特别有用。如果有人能给我指出一个好的图层设计来源,它有一个更数学的方法,这将是巨大的好处

此外,所有输入数据均已标准化,尽管其中一个类别介于[-1,1]之间,而非[0,1];我不明白为什么这会成为一个问题,但也许是这样

def Network(IN, OUT, TIME_PERIOD, EPOCHS, BATCH_SIZE, LTSM_SHAPE):

    length = len(OUT)
    train_x = IN[:int(0.9 * length)]
    validation_x = IN[int(0.9 * length):]
    train_y = OUT[:int(0.9 * length)]
    validation_y = OUT[int(0.9 * length):]

    model = Sequential()

    model.add(LSTM(LTSM_SHAPE, input_shape=(train_x.shape[1:]), return_sequences=True))
    model.add(Dropout(0.2))
    model.add(BatchNormalization())  

    model.add(LSTM(LTSM_SHAPE, return_sequences=True))
    model.add(Dropout(0.2))
    model.add(BatchNormalization())

    model.add(LSTM(LTSM_SHAPE, return_sequences=True))
    model.add(Dropout(0.2))
    model.add(BatchNormalization())

    model.add(Dense(3, activation='softmax'))
    model.add(Dense(1))

    opt = tf.keras.optimizers.Adam()
    model.compile(loss='sparse_categorical_crossentropy', optimizer=opt, metrics=['accuracy'])

    train_y = np.asarray(train_y)
    validation_y = np.asarray(validation_y)
    history = model.fit(train_x, train_y, batch_size=BATCH_SIZE, epochs=EPOCHS, validation_data=(validation_x, validation_y))
    print('\nhistory dict:', history.history)

    # Score model
    score = model.evaluate(validation_x, validation_y, verbose=0)
    print('Test loss:', score[0])
    print('Test accuracy:', score[1])
    # Save model
    model.save(f"models/{NAME}")

EPOCHS, BATCH_SIZE, LTSM_SHAPE = 15, 32, 128

Network(x, Y, 3, EPOCHS, BATCH_SIZE, LTSM_SHAPE)



我不熟悉这个错误,但你试过按它说的做吗?你的目标应该在0到3之间。softmax之后的密集层为1是一个奇怪的选择。这是什么类型的任务?如果删除了您引用的密集层1,我会得到相同的错误引用,但它会变成:
InvalidArgumentError:assertion failed:[条件x==y未保持元素状态:][x(丢失/密集\u 34\u丢失/稀疏oftmaxCrossEntryWithLogits/Shape\u 1:0)=][32 1][y(loss/dense_34_loss/SparseSoftmaxCrossEntropyWithLogits/Strated_slice:0)=[32 3][[node loss/dense_34_loss/SparseSoftmaxCrossEntropyWithLogits/assert_equal_1/assert/assert(定义于:30)][Op:_推断\分布式\函数\ U 153036]函数调用堆栈:分布式函数
任务是在给定最后3个时间实例数据的情况下,对时间序列数据中的下一个序列进行分类预测