gpt4 book ai didi

python - keras 模型如何只预测一个样本?

转载 作者:太空宇宙 更新时间:2023-11-04 05:15:43 26 4
gpt4 key购买 nike

在我的项目中,我想进行离线训练,这意味着它将以批处理方式处理样本(我设置了

batch_size=100

model.fit()) 中,我只想实时预测一个样本,所以我使用:

model.predict(x_real_time, batch_size=1)

但它显示错误:

`ValueError: Cannot feed value of shape (1, 3) for Tensor 'input_11:0', which has shape '(165047, 3)'`

有人能告诉我如何解决这个问题吗?谢谢

完整代码:

batch_size = int(data_num_.shape[0]/10)

original_dim = data_num_.shape[1]

latent_dim = data_num_.shape[1]*2

intermediate_dim = data_num_.shape[1]*10

nb_epoch = 10

epsilon_std = 0.001



data_untrain = data_scale.transform(df[(df['label']==cluster_num)&(df['prob']<threshold)].iloc[:,:data_num.shape[1]].values)

data_untrain_num = (int(data_untrain.shape[0]/batch_size)-1)*batch_size

data_untrain = data_untrain[:data_untrain_num,:]



x = Input(batch_shape=(batch_size, original_dim))

init_drop = Dropout(0.2, input_shape=(original_dim,))(x)

h = Dense(intermediate_dim, activation='relu')(init_drop)

z_mean = Dense(latent_dim)(h)

z_log_var = Dense(latent_dim)(h)





def sampling(args):

z_mean, z_log_var = args

epsilon = K.random_normal(shape=(batch_size, latent_dim), mean=0.,

std=epsilon_std)

return z_mean + K.exp(z_log_var / 2) * epsilon

z = Lambda(sampling, output_shape=(latent_dim,))([z_mean, z_log_var])


decoder_h = Dense(intermediate_dim, activation='relu')

decoder_mean = Dense(original_dim, activation='linear')

h_decoded = decoder_h(z)

x_decoded_mean = decoder_mean(h_decoded)





def vae_loss(x, x_decoded_mean):

xent_loss = original_dim * objectives.mae(x, x_decoded_mean)

kl_loss = - 0.5 * K.sum(1 + z_log_var - K.square(z_mean) - K.exp(z_log_var), axis=-1)

return xent_loss + kl_loss



vae = Model(x, x_decoded_mean)

vae.compile(optimizer=Adam(lr=0.01), loss=vae_loss)



train_ratio = 0.9

train_num = int(data_num_.shape[0]*train_ratio/batch_size)*batch_size

test_num = int(data_num_.shape[0]*(1-train_ratio)/batch_size)*batch_size



x_train = data_num_[:train_num,:]

x_test = data_num_[-test_num:,:]



vae.fit(x_train, x_train,

shuffle=True,

nb_epoch=nb_epoch,

batch_size=batch_size,

validation_data=(x_test, x_test))



# build a model to project inputs on the latent space

encoder = Model(x, z_mean)

x_test_predict = data_scale_.inverse_transform(vae.predict(x_test, batch_size=1))

x_test = data_scale_.inverse_transform(x_test)

for idx in range(x_test.shape[1]):

plt.plot(x_test[:,idx], alpha=0.3, color='red')

plt.plot(x_test_predict[:,idx], alpha=0.3, color='blue')

plt.show()

plt.close()

最佳答案

问题出在输入层。您不应传递批量大小。如果您想使用可变批量大小进行预测,您应该传入没有批量大小的 input_shape,然后您可以只传入一个样本。

所以:

x = Input(shape=(3,))

关于python - keras 模型如何只预测一个样本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41736677/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com