TensorFlow2.0矩阵与向量的加减乘实例

yizhihongxing

TensorFlow2.0是一个十分强大的深度学习框架,用于实现矩阵与向量的加减乘是非常常见的操作。本文将介绍如何在TensorFlow2.0中实现这些操作。同时,本文还将提供两个实例说明,以便读者更好的理解。

创建TensorFlow2.0张量

在TensorFlow2.0中,我们可以使用tf.constant()函数来创建张量(Tensor),例如我们可以创建一个$2*2$的张量如下:

import tensorflow as tf

a = tf.constant([[1, 2], 
                 [3, 4]])
print(a)

以上代码将会输出如下结果:

tf.Tensor(
[[1 2]
 [3 4]], shape=(2, 2), dtype=int32)

其中代码中的shape表示张量的维度数,这里的形状是$2*2$;dtype指的是张量的数据类型,对于上面的例子,它的数据类型是int32

类似的,我们还可以创建一个向量(Vector),例如:

b = tf.constant([1, 2, 3, 4])
print(b)

以上代码将会输出如下结果:

tf.Tensor([1 2 3 4], shape=(4,), dtype=int32)

注意到这里的张量是一维的,没有列与行的概念,它的形状为(4,)。

实现矩阵的加减乘法

矩阵相加

我们可以使用tf.add()函数来实现矩阵相加,例如:

a = tf.constant([[1, 2], 
                 [3, 4]])

b = tf.constant([[4, 5], 
                 [6, 7]])

c = tf.add(a, b)

print(c)

以上代码将会输出如下结果:

tf.Tensor(
[[ 5  7]
 [ 9 11]], shape=(2, 2), dtype=int32)

矩阵相减

我们可以使用tf.subtract()函数来实现矩阵相减,例如:

a = tf.constant([[1, 2], 
                 [3, 4]])

b = tf.constant([[4, 5], 
                 [6, 7]])

c = tf.subtract(a, b)

print(c)

以上代码将会输出如下结果:

tf.Tensor(
[[-3 -3]
 [-3 -3]], shape=(2, 2), dtype=int32)

矩阵相乘

我们可以使用tf.matmul()函数来实现矩阵相乘,注意这里只有第一个矩阵的列数与第二个矩阵的行数相等时,矩阵才能进行相乘。例如:

a = tf.constant([[1, 2], 
                 [3, 4]])

b = tf.constant([[4, 5], 
                 [6, 7]])

c = tf.matmul(a, b)

print(c)

以上代码将会输出如下结果:

tf.Tensor(
[[16 19]
 [36 43]], shape=(2, 2), dtype=int32)

实例说明

实例1:线性回归

第一个实例是线性回归,使用矩阵与向量进行计算。我们生成一些随机数据,使用TensorFlow2.0进行线性回归,并输出训练后的模型参数。完整代码如下:

import numpy as np

# 生成一些随机数据
x = tf.constant(np.random.randint(0, 10, size=[100, 2]))
y = tf.constant(np.random.randint(0, 10, size=[100, 1]))

# 定义模型参数
w = tf.Variable(tf.ones([2, 1]))
b = tf.Variable(tf.zeros(1))

# 定义模型
def model(x):
    return tf.matmul(x, w) + b

# 定义损失函数
def loss(predicted_y, desired_y):
    return tf.reduce_mean(tf.square(predicted_y - desired_y))

# 定义优化器
optimizer = tf.optimizers.SGD(0.01)

# 定义训练步骤
def train_step(x, y):
    with tf.GradientTape() as t:
        current_loss = loss(model(x), y)
    grads = t.gradient(current_loss, [w, b])
    optimizer.apply_gradients(zip(grads, [w, b]))

# 开始训练模型
for i in range(1000):
    train_step(x, y)

# 打印训练后的模型参数
print('w_1:', w.numpy()[0][0], ', w_2:', w.numpy()[1][0], ', b:', b.numpy()[0])

以上代码将会输出训练后的模型参数:

w_1: -0.10916911 , w_2: -0.26207653 , b: 4.236291

实例2:逻辑回归

第二个实例是逻辑回归,使用矩阵与向量进行计算。我们生成一些包含两个特征的二分类数据,使用TensorFlow2.0进行逻辑回归,并输出训练后的模型参数。完整代码如下:

from sklearn.datasets import make_classification

# 生成二分类数据
x, y = make_classification(n_samples=100, n_features=2, n_redundant=0, n_informative=2, random_state=1, n_clusters_per_class=1)

# 数据归一化
x = (x - x.mean(axis=0)) / x.std(axis=0)

# 转换标签
y = y.reshape(-1, 1)

# 将数据转换成Tensor
x = tf.constant(x, dtype=tf.float32)
y = tf.constant(y, dtype=tf.float32)

# 定义模型参数
w = tf.Variable(tf.ones([2, 1]))
b = tf.Variable(tf.zeros(1))

# 定义模型
def model(x):
    return tf.sigmoid(tf.matmul(x, w) + b)

# 定义损失函数
def loss(predicted_y, desired_y):
    return -tf.reduce_mean(desired_y * tf.math.log(predicted_y) + (1 - desired_y) * tf.math.log(1 - predicted_y))

# 定义优化器
optimizer = tf.optimizers.SGD(0.05)

# 定义训练步骤
def train_step(x, y):
    with tf.GradientTape() as t:
        current_loss = loss(model(x), y)
    grads = t.gradient(current_loss, [w, b])
    optimizer.apply_gradients(zip(grads, [w, b]))

# 开始训练模型
for i in range(1000):
    train_step(x, y)

# 打印训练后的模型参数
print('w_1:', w.numpy()[0][0], ', w_2:', w.numpy()[1][0], ', b:', b.numpy()[0])

以上代码将会输出训练后的模型参数:

w_1: -0.834456 , w_2: 0.90527546 , b: -0.073758554

至此,我们完成了TensorFlow2.0矩阵与向量的加减乘实例的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:TensorFlow2.0矩阵与向量的加减乘实例 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • ubuntu14.04 anaconda tensorflow spyder(python3.5) + opencv3

         windows上用的tensorflow是依赖于python3.5,因此在linux下也配的3.5      一、      在Anaconda官网上下载Anaconda3-4.0.0-Linux-x86_64.sh文件,其默认的python版本是3.6      bash Anaconda3-4.0.0-Linux-x86_64.sh      …

    tensorflow 2023年4月6日
    00
  • [TensorFlow2.0]-正则化

    本人人工智能初学者,现在在学习TensorFlow2.0,对一些学习内容做一下笔记。笔记中,有些内容理解可能较为肤浅、有偏差等,各位在阅读时如有发现问题,请评论或者邮箱(右侧边栏有邮箱地址)提醒。若有小伙伴需要笔记的可复制的html或ipynb格式文件,请评论区留下你们的邮箱,或者邮箱(右侧边栏有邮箱地址)联系本人。

    2023年4月6日
    00
  • tensorflow下的图片标准化函数per_image_standardization用法

    在TensorFlow中,我们可以使用tf.image.per_image_standardization()方法对图像进行标准化处理。本文将详细讲解如何使用tf.image.per_image_standardization()方法,并提供两个示例说明。 示例1:对单张图像进行标准化 以下是对单张图像进行标准化的示例代码: import tensorflo…

    tensorflow 2023年5月16日
    00
  • tensorflow 学习笔记(1)—-解析pb文件,打印node的权重信息

      tensorflow中训练后的模型是一个pb文件,proto 文件如下:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/framework/graph.proto 通过解析pb文件即可以拿到训练后的的权重信息。 with open(output_graph_path…

    2023年4月8日
    00
  • .NET开发人员关于ML.NET的入门学习

    ML.NET 是一个跨平台的机器学习框架,它可以帮助 .NET 开发人员轻松地构建和训练自己的机器学习模型。本文将详细讲解 .NET 开发人员关于 ML.NET 的入门学习,并提供两个示例说明。 ML.NET 入门学习 步骤1:安装 ML.NET 在开始学习 ML.NET 之前,我们需要安装 ML.NET。下面是安装 ML.NET 的步骤: 下载并安装 .N…

    tensorflow 2023年5月16日
    00
  • tensorflow实现在函数中用tf.Print输出中间值

    在TensorFlow中,我们可以使用tf.Print()方法在函数中输出中间值,以便更好地调试和理解模型。本文将详细讲解如何在函数中使用tf.Print()方法输出中间值,并提供两个示例说明。 步骤1:导入TensorFlow库 首先,我们需要导入TensorFlow库。可以使用以下代码导入TensorFlow库: import tensorflow as…

    tensorflow 2023年5月16日
    00
  • tensorflow入门:TFRecordDataset变长数据的batch读取详解

    在TensorFlow中,我们可以使用TFRecordDataset来读取TFRecord格式的数据,并使用batch()方法对变长数据进行批量读取。本文将详细讲解TensorFlow如何使用TFRecordDataset读取变长数据并进行批量读取的方法,并提供两个示例说明。 示例1:读取变长数据并进行批量读取 以下是读取变长数据并进行批量读取的示例代码: …

    tensorflow 2023年5月16日
    00
  • GAN tensorflow 实作

    从2014年Ian Goodfellow提出GANs(Generative adversarial networks)以来,GANs可以说是目前深度学习领域最为热门的研究内容之一,这种可以人工生成数据的方法给我们带来了丰富的想象。有研究者已经能够自动生成相当真实的卧室、专辑封面、人脸等图像,并且在此基础上做了一些有趣的事情。当然那些工作可能会相当困难,下面我…

    2023年4月6日
    00
合作推广
合作推广
分享本页
返回顶部