MNIST Training



http://blog.csdn.net/u013508213/article/details/53401655


MNIST Training

MNIST是在机器学习领域中的一个经典问题。该问题解决的是把28x28像素的灰度手写数字图片识别为相应的数字,其中数字的范围从0到9。

MNIST是ML界的’hello world’,这个比喻还挺有意思的。

MNIST Data

MNIST数据集有四个文件:

  • train-images-idx3-ubyte.gz:训练集图片 - 55000 张 训练图片,5000 张 验证图片。
  • train-labels-idx1-ubyte.gz:训练集图片对应的数字标签。
  • t10k-images-idx3-ubyte.gz:测试集图片 - 10000 张 图片。
  • t10k-labels-idx1-ubyte.gz:测试集图片对应的数字标签。

这些文件本身并没有使用标准的图片格式存储。在下面代码中extract_images()和extract_labels()函数可以手动解压他们。

图片数据将被解压成2维的tensor:[image index, pixel index] 其中每一项表示某一图片中特定像素的强度值。”image index”代表数据集中图片的编号,从0到数据集的上限值。”pixel index”代表该图片中像素点的个数, 从0到图片的像素上限值。

以train-*开头的文件中包括60000个样本,其中分割出55000个样本作为训练集,其余的5000个样本作为验证集。因为所有数据集中28x28像素的灰度图片的尺寸为784,所以训练集输出的tensor格式为[55000, 784]。

数字标签数据被解压成1维的tensor:[image index],它定义了每个样本数值的类别分类。对于训练集的标签来说,这个数据规模就是:[55000]。

解压重构图片和标签数据之后,会得到如下数据集对象:

  • data_sets.train:55000 组 图片和标签,用于训练。
  • data_sets.validation:5000 组 图片和标签,用于迭代验证训练的准确性。
  • data_sets.test:10000 组 图片和标签, 用于最终测试训练的准确性。

调用以下代码中的read_data_sets()函数,将会返回一个DataSet实例,其中包含了以上三个数据集。

函数DataSet.next_batch()是用于获取以batch_size为大小的一个元组,其中包含了一组图片和标签,该元组会被用于当前的TensorFlow运算会话中。


这里tensorflow版本不同导致的该函数的参数形式的区别:

resized_image = tf.image.resize_images(img_data_jpg,28,28, method=0)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Runs MNIST training with differential privacy. """ Using matrix project to compress the gradient matrix """ def compress(grad, num_k, power_iter=1): return B, G_hat """ Complete the function of per-example clip """ def clip_column(tsr, clip_value=1.0): return def train(args, model, device, train_loader, optimizer, epoch, loss_func, clip_value): model.train() # criterion = nn.CrossEntropyLoss() losses = [] for _batch_idx, (data, target) in enumerate(tqdm(train_loader)): data, target = data.to(device), target.to(device) batch_grad_list = [] optimizer.zero_grad() output = model(data) loss = loss_func(output, target) if not args.disable_dp: with backpack(BatchGrad()): loss.backward() for p in model.parameters(): batch_grad_list.append(p.grad_batch.reshape(p.grad_batch.shape[0], -1)) #compose gradient into Matrix del p.grad_batch """ Using project method to compress the gradient """ if args.using_compress: #per-example clip else: """ Complete the code of DPSGD """ else: loss.backward() try: for p in model.parameters(): del p.grad_batch except: pass optimizer.step() losses.append(loss.item()) #get the num of the training dataset from train_loader if not args.disable_dp: epsilon = get_epsilon(epoch, delta=args.delta, sigma=args.sigma, sensitivity=clip_value, batch_size=args.batch_size, training_nums=len(train_loader)*args.batch_size) print( f"Train Epoch: {epoch} \t" f"Loss: {np.mean(losses):.6f} " f"(ε = {epsilon:.2f}, δ = {args.delta})" ) else: print(f"Train Epoch: {epoch} \t Loss: {np.mean(losses):.6f}")
最新发布
06-12

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值