Tensorflow2.0之4维张量

本文详细介绍了TensorFlow 2.0中4维张量的应用,特别是在卷积神经网络中的作用,包括其格式定义、如何创建及进行前向计算的过程。同时,文章还探讨了4维张量的索引和切片问题。

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

Tensorflow2.0之4维张量

简介:

4 维张量在卷积神经网络中应用的非常广泛,它用于保存特征图(Feature maps)数据,

格式定义

格式一般定义为:
[ b , h , w , c ] [b,h,w,c] [b,h,w,c]
其中𝑏表示输入的数量,h/w分布表示特征图的高宽,𝑐表示特征图的通道数,部分深度学习框架也会使用[𝑏, 𝑐, ℎ, ]格式的特征图张量,例如PyTorch。图片数据是特征图的一种,对于含有RGB 3 个通道的彩色图片,每张图片包含了h 行w 列像素点,每个点需要3 个数值表示RGB 通道的颜色强度,因此一张图片可以表示为[h, w, 3]。如图所示,最上层的图片表示原图,它包含了下面3 个通道的强度信息。
在这里插入图片描述
神经网络中一般并行计算多个输入以提高计算效率,故𝑏张图片的张量可表示为:
[ b , h , w , c ] [b,h,w,c] [b,h,w,c]

# 创建32x32 的彩色图片输入,个数为4
x = tf.random.normal([4,32,32,3])
# 创建卷积神经网络
layer = layers.Conv2D(16,kernel_size=3)
out = layer(x) # 前向计算
out.shape # 输出大小
Out[48]: TensorShape([4, 30, 30, 16])

其中卷积核张量也是4 维张量,可以通kernel 成员变量访问:

In [49]: layer.kernel.shape
Out[49]: TensorShape([3, 3, 3, 16])

对于4维张量的索引和切片问题

这个在我的另一篇博客中有详解说明:
博客链接:https://blog.youkuaiyun.com/python_LC_nohtyp/article/details/104078810

### TensorFlow 2.0 加载 MNIST 数据集示例 在 TensorFlow 2.0 中,加载 MNIST 数据集变得非常简单。可以通过 `tf.keras.datasets.mnist` 提供的功能来完成这一操作。以下是完整的代码示例: ```python import tensorflow as tf # 加载 MNIST 数据集 mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() # 归一化处理像素值到 [0, 1] 范围 x_train, x_test = x_train / 255.0, x_test / 255.0 # 扩展度以适应卷积神经网络的要求 x_train = x_train[..., tf.newaxis].astype("float32") x_test = x_test[..., tf.newaxis].astype("float32") # 创建数据管道并设置批处理大小 BATCH_SIZE = 32 train_ds = tf.data.Dataset.from_tensor_slices((x_train, y_train)).shuffle(10000).batch(BATCH_SIZE) test_ds = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(BATCH_SIZE) # 定义模型结构 model = tf.keras.models.Sequential([ tf.keras.layers.InputLayer(input_shape=(28, 28, 1)), tf.keras.layers.Conv2D(filters=32, kernel_size=(3, 3), activation='relu'), tf.keras.layers.MaxPooling2D(pool_size=(2, 2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(units=128, activation='relu'), tf.keras.layers.Dense(units=10, activation='softmax') ]) # 编译模型 loss_object = tf.keras.losses.SparseCategoricalCrossentropy() optimizer = tf.keras.optimizers.Adam(learning_rate=0.001) model.compile(optimizer=optimizer, loss=loss_object, metrics=['accuracy']) # 训练模型 EPOCHS = 5 history = model.fit(train_ds, epochs=EPOCHS, validation_data=test_ds) ``` 上述代码展示了如何通过 TensorFlow 的 Keras API 来加载和预处理 MNIST 数据集[^1]。它还包含了构建简单的 CNN 模型以及训练过程中的配置。 #### 关键点说明: - **数据加载**:MNIST 数据集可以直接通过 `tf.keras.datasets.mnist.load_data()` 方法获取。 - **归一化**:将图像像素值从 `[0, 255]` 映射至 `[0, 1]` 是常见的做法,有助于加速收敛。 - **扩展度**:由于许多深度学习框架期望输入张量具有通道数(即使对于灰度图也是如此),因此需要增加额外的轴。 - **数据增强与批处理**:利用 `tf.data.Dataset` 构建高效的数据流水线可以显著提高性能[^4]。 - **编译选项**:选择了 Adam 优化器和稀疏分类交叉熵作为损失函数,这是解决多类分类问题的标准组合[^5]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值