tf学习(三)—— MNIST手写识别 上

博客介绍了在使用TensorFlow进行MNIST手写数字识别时遇到的NameError问题,原因是未正确导入input_data别名。解决方案是导入tensorflow.examples.tutorials.mnist.input_data并命名为input_data。随后,文章详细展示了MNIST数据集的存储结构,包括训练和测试数据的图像和标签的形状,并解释了训练图像的像素值特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MNIST-NameError: name ‘input_data’ is not defined解决办法

其实这是由于导入工具库后没有使用正确别名的原因,只要加入as input_data即可。
应改成如下代码:
import tensorflow.examples.tutorials.mnist.input_data as input_data

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)


了解MNIST存储情况

分为训练数据与测试数据

train_images=mnist.train.images
train_labels = mnist.train.labels
test_images = mnist.test.images

test_labels = mnist.test.labels

print("train_images_shape:", train_images.shape)
print("train_labels_shape:", train_labels.shape)
print("test_images_shape:", test_images.shape)

print("test_labels_shape:", test_labels.shape)

import tensorflow.examples.tutorials.mnist.input_data as input_data

mnist=input_data.read_data_sets("MNIST_data/",one_hot=True)

结果

train_images_shape: (55000, 784)
train_labels_shape: (55000, 10)
test_images_shape: (10000, 784)
test_labels_shape: (10000, 10)


<

### 联邦学习实现MNIST手写数字识别 #### 实现概述 为了使用联邦学习进行MNIST手写数字识别,可以采用TensorFlow Federated(TFF)框架。TFF是一个开源库,旨在支持多种类型的模拟分布式训练环境下的机器学习和其他计算需求。 #### 准备工作 安装必要的Python包,包括`tensorflow_federated`和`tensorflow`: ```bash pip install --upgrade tensorflow-federated pip install --upgrade tensorflow ``` #### 加载并预处理数据集 加载MNIST数据集,并对其进行适当调整以便于联邦设置中使用: ```python import tensorflow as tf import tensorflow_federated as tff # Load the dataset mnist_train, mnist_test = tf.keras.datasets.mnist.load_data() def preprocess(dataset): def batch_format_fn(element): """Flatten a batch `element` and return.""" return (tf.reshape(element['x'], [-1, 784]), element['y']) return dataset.repeat(10).shuffle(500).batch(20).map(batch_format_fn) emnist_train = tff.simulation.datasets.emnist.load_data() example_dataset = emnist_train.create_tf_dataset_for_client( emnist_train.client_ids[0]) preprocessed_example_dataset = preprocess(example_dataset) ``` 这段代码定义了一个函数来准备单个客户端的数据子集[^1]。 #### 构建模型 创建一个简单的Keras模型来进行分类任务: ```python def create_keras_model(): return tf.keras.models.Sequential([ tf.keras.layers.InputLayer(input_shape=(784,)), tf.keras.layers.Dense(10, kernel_initializer='zeros'), tf.keras.layers.Softmax(), ]) def model_fn(): keras_model = create_keras_model() return tff.learning.from_keras_model( keras_model, input_spec=preprocessed_example_dataset.element_spec, loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics=[tf.keras.metrics.SparseCategoricalAccuracy()]) ``` 这里构建了一个具有单一隐藏层的全连接神经网络作为基础模型。 #### 定义迭代过程 设定联邦优化的过程参数以及初始化状态: ```python iterative_process = tff.learning.build_federated_averaging_process(model_fn) state = iterative_process.initialize() for round_num in range(1, 11): state, metrics = iterative_process.next(state, federated_train_data) print('round {:2d}, metrics={}'.format(round_num, metrics)) ``` 此部分实现了基于梯度下降法的联邦平均算法,即每次迭代收集来自多个参与方更新后的权重再求均值以形成新的全局模型版本。 #### 测试与评估 最后一步是对测试集中样本执行预测操作从而衡量最终得到的模型效果如何: ```python evaluation = tff.learning.build_federated_evaluation(model_fn) test_metrics = evaluation(state.model, [federated_test_data]) print(test_metrics) ``` 上述流程展示了完整的联邦学习实验周期——从获取原始资料直至完成性能评测为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值