Tensorflow 如何利用批量训练模型,对单次输入进行预测?
我有在数据集上训练过的RNN模型: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
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,而在预测中,它只是一个。谢谢你给我指明了正确的方向。