Tensorflow 如何利用批量训练模型,对单次输入进行预测?

Tensorflow 如何利用批量训练模型,对单次输入进行预测?,tensorflow,keras,Tensorflow,Keras,我有在数据集上训练过的RNN模型: train = tf.data.Dataset.from_tensor_slices((data_x[:train_size], data_y[:train_size])).batch(batch_size).repeat() 型号: model = tf.keras.Sequential() model.add(tf.keras.layers.GRU(units=lstm_num_unit

我有在数据集上训练过的RNN模型:

train = tf.data.Dataset.from_tensor_slices((data_x[:train_size],
                          data_y[:train_size])).batch(batch_size).repeat()
型号:

    model = tf.keras.Sequential()
    model.add(tf.keras.layers.GRU(units=lstm_num_units,
                                   return_sequences=True,
                                   kernel_initializer='random_uniform',
                                   recurrent_initializer='random_uniform',
                                   bias_initializer='random_uniform',
                                   batch_size=batch_size,
                                   input_shape = [seq_len, num_features]))
    model.add(tf.keras.layers.LSTM(units=lstm_num_units,
                                   batch_size=batch_size,
                                   return_sequences=True,
                                   input_shape = [seq_len, num_features]))
    model.add(tf.keras.layers.Flatten())
    model.add(tf.keras.layers.Dense(units=dence_units))
    model.add(tf.keras.layers.Dropout(drop_flat))
    model.add(tf.keras.layers.Dense(units=out_units))
    model.add(tf.keras.layers.Softmax())   

    model.compile(loss="sparse_categorical_crossentropy",
            optimizer=tf.train.RMSPropOptimizer(opt),
            metrics=['accuracy'])

 model.fit(train, epochs=EPOCHS,
                        steps_per_epoch=repeat_size_train,
                        validation_data=validate,
                        validation_steps=repeat_size_validate,
                        verbose=1,
                        shuffle=True)
                        callbacks=[tensorboard, cp_callback])
我需要对seq_len的单个输入进行预测,但看起来我的输入必须是批量大小:

ar = np.random.randint(98, size=[batch_size, seq_len])
ar = np.reshape(ar, [batch_size, seq_len, 1])
prediction = model.m.predict(ar)

有没有一种方法可以让它在单个输入的shape[1,seq_len,1]上工作?

是的,只需在第一层重建模型,而不需要批量大小

复制旧模型的权重

newModel.set_weights(oldModel.get_weights())
批次大小的目的仅存在于
stateful=True
模型中,以保持批次之间的一致性


尽管如此,由于批量大小,数学上没有变化。

谢谢。你的评论帮助我解决了这个问题。我可以不使用批重建模型,甚至不使用指定的批大小重建原始模型,因为它将从数据集中扣除。批大小仅在
fit
中定义(除非您使用的是
stateful=True
)。默认值为32,仅用于培训。如果您认为此答案解决了您的问题,请将其标记为已回答:)根据我收到的错误msgs,我无法将
fit
中的批大小与
tf数据集一起使用。我定义批处理大小的另一个地方是在第一层,所以我把它删除了。现在,模型接受任意的
批量大小
;其中,在培训部分,我在
tf.data.Dataset
中将其指定为64,而在预测中,它只是一个。谢谢你给我指明了正确的方向。