Python 如何修复验证步骤中使用的代码?
当我训练Resnet时,洗牌验证集的精度不等于非洗牌版本的精度。 训练集以同样的方式洗牌 我试着每次使用一个样本向网络提供信息,在vali集合中获得了相同的准确性。但是,当我每次使用一批样本时,比如说256个样本,精度是不相等的 培训过程Python 如何修复验证步骤中使用的代码?,python,validation,tensorflow,resnet,Python,Validation,Tensorflow,Resnet,当我训练Resnet时,洗牌验证集的精度不等于非洗牌版本的精度。 训练集以同样的方式洗牌 我试着每次使用一个样本向网络提供信息,在vali集合中获得了相同的准确性。但是,当我每次使用一批样本时,比如说256个样本,精度是不相等的 培训过程 从理论上讲,vali集合的顺序不会影响结果。我假设您使用的是退出或批量标准化。在这两种情况下,您都需要在推理过程中向训练参数提供bool-tensorflow变量。由于顺序似乎会影响结果,因此我将假设批量标准化: . feed training=False,带
从理论上讲,vali集合的顺序不会影响结果。我假设您使用的是退出或批量标准化。在这两种情况下,您都需要在推理过程中向训练参数提供bool-tensorflow变量。由于顺序似乎会影响结果,因此我将假设批量标准化:
.
feed training=False,带有tensorflow占位符
count = 1
while 1:
#get training_data
if (count - 1) % 5200 == 0:
train_set,train_label = get_traindata(eng, 70)
tset,tlabel = train_set,train_label
tset_num = tset.shape[0]
#split and train
num_batches = tset_num // batch_size
order = np.random.choice(tset_num, num_batches * batch_size,replace = False)
train_data_subset = tset[order,:]
train_labels_subset = tlabel[order]
for step in range(num_batches):
offset = step * validation_size
feed_dict = {
x: train_data_subset[offset:offset+batch_size,:],
y: train_labels_subset[offset:offset+batch_size],
}
_, tloss, tacc,gd = sess.run([train_op,loss, accuracy,grad_norm],
feed_dict=feed_dict)
if (count-1) % 200 == 0:
#get validationset
if (count-1) % 1400 == 0:
vset,vlabel = get_validata(eng, 20)
vnum_batches = vset.shape[0] // validation_size
order = np.random.choice(vset.shape[0], vnum_batches * validation_size,replace = False) #shuffled
va_data_subset = vset[order,:]
va_labels_subset = vlabel[order]
loss_list = []
error_list = []
loss_list_s = []
error_list_s = []
for stepv in range(vnum_batches):
offsetv = stepv * validation_size
feed_dict_shuffle = {
x: va_data_subset[offsetv:offsetv+validation_size,:],
y: va_labels_subset[offsetv:offsetv+validation_size],
}
vloss_s, vacc_s = sess.run([loss, accuracy], feed_dict=feed_dict_shuffle)
loss_list_s.append(vloss_s)
error_list_s.append(vacc_s)
feed_dict = {
x: vset[offsetv:offsetv+validation_size,:],
y: vlabel[offsetv:offsetv+validation_size],
}
vloss, vacc = sess.run([loss, accuracy], feed_dict=feed_dict)
loss_list.append(vloss)
error_list.append(vacc)
#the performance in the shuffled vali-set
vloss_s = np.mean(loss_list_s)
vacc_s = np.mean(error_list_s)
#the performance in the unshuffled vali-set
vloss = np.mean(loss_list)
vacc = np.mean(error_list)