Python keras模型如何仅预测一个样本?
在我的项目中,我想进行离线培训,这意味着它将以批处理方式处理样本(我设置了Python keras模型如何仅预测一个样本?,python,deep-learning,Python,Deep Learning,在我的项目中,我想进行离线培训,这意味着它将以批处理方式处理样本(我设置了 batch\u 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\u 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()
batch\u size=int(数据\u num\u.shape[0]/10)
原始尺寸=数据数量形状[1]
潜在尺寸=数据数量形状[1]*2
中间尺寸=数据数量形状[1]*10
nb_epoch=10
εu标准=0.001
data_untrain=data_scale.transform(df[(df['label']==cluster_num)&(df['prob']]问题在于输入层。不应传入批量大小。如果要使用可变批量大小进行预测,则应传入没有批量大小的输入形状,然后只传入单个样本
因此:
请把你的全部代码放在这里好吗?模型实例化的代码和x_real_time的形状将极大地帮助我们解决你的问题。谢谢大家,我已经附上了上面的代码。是否可以通过批处理样本进行训练,并通过单一方式处理样本进行预测?因为我有更多的对于1000万个样本,我想使用mini-batch进行训练。是的,如果你不是从固定的批量开始,你仍然可以通过将批量大小传递给fit方法来进行批量训练。在拟合模型后,我运行vae.predict(x_test,batch_size=1)我显示一个错误:ValueError:无法将输入数组从shape(79397,3)广播到shape中(1,3)似乎必须正确设置批次大小。。。。
x = Input(shape=(3,))