小白Mindspore大模型学习笔记(2)

张量的属性

  1. 张量的形状
  2. 张量的数据类型
  3. 张量的矢(维度)
  4. 张量的元素个数
  5. 张量的每一维度步长

import numpy as np
from mindspore import Tensor

x=Tensor(np.array([[0,1,4],[3,4,8],[5,8,8]]).astype(np.float16))
y=Tensor(np.array([[0,1],[3,4],[5,8]]).astype(np.float16))
print("x_shape",x.shape)
print("x_dtype",x.dtype)
print("x_ndim",x.ndim)
print("x_size",x.size)
print("x_strides",x.strides)
print("y_strides",y.strides)

张量之间的运算:

张量的意义

张量是一种数学对象,可以理解为一个多维数组。我们平常所见的标量、向量和矩阵都是张量的特例:

  • 标量:一个单独的数,可以看作是零阶张量(0D)。
  • 向量:一维数组,如 [1,2,3][1, 2, 3][1,2,3],是一个一阶张量(1D)。
  • 矩阵:二维数组,是一个二阶张量(2D)。
  • 更高阶张量:三维及更高维的数组,比如三阶张量可以看作是多个矩阵的集合。

张量的作用

张量在很多科学和工程领域有广泛应用,尤其是在机器学习和深度学习中:

  1. 数据表示

    • 张量用于表示输入数据和模型参数。在图像处理领域,一张彩色图片可以表示为一个三维张量(高度、宽度和颜色通道)。
    • 在自然语言处理领域,文本数据可以表示为一维或二维张量(单词或句子)。
  2. 计算方便

    • 张量运算如加法、乘法等可以高效地进行并行计算,这对于处理大量数据和复杂模型非常重要。
    • 张量库(如TensorFlow、PyTorch和MindSpore)提供了很多内置函数,可以方便地对张量进行操作。
  3. 模型训练

    • 深度学习模型的训练过程中,参数更新和数据处理都使用张量。
    • 通过定义损失函数和优化算法,模型可以在训练过程中不断调整参数,使得预测结果更准确。

模型

网络构建:
定义类
class Network(nn.Cell):#定义一个网络,继承自nn.cell
    def _init_(self):#定义初始化方法。当创建 Network 类的实例时,这个方法会被自动调用。
        super()._init_()
        self.flatten=nn.Flatten()
#定义一个展平层 Flatten,用于将输入的多维张量展平成一维。
        self.dense_relu_sequential=nn.SequentialCell(
#定义一个顺序层,包含全连接层和relu激活函数
        self.Dense(28*28,512,weight_init="normal",bias_init="zeros"),
# 第一个全连接层,输入大小为 28*28,输出大小为 512,权重初始化为正态分布,偏置初始化为零
        nn.ReLU(),
        self.Dense(512,512,weight_init="normal",bias_init="zeros"),
# 第二个全连接层,输入大小为 512,输出大小为512,权重初始化为正态分布,偏置初始化为零
        nn.ReLU(),
        self.Dense(512,10,weight_init="normal",bias_init="zeros"),
# 第二个全连接层,输入大小为 512,输出大小为10,权重初始化为正态分布,偏置初始化为零
        )
    def construct(self,x): # 前向传播方法
        x=self.flatten(x) #定义一个展平层 Flatten,用于将输入的多维张量展平成一维
        logits=self.dense_relu_sequential(x) # 通过上面定义的顺序层进行计算
        return logits

构建完成后实例化该网络

#实例化模型
model = Network()
# 打印模型结构
print(model)

模型层详细每个函数的用法如下:

创建传入的图像:

image=ops.ones((5,38,38),mindspore.float32)
print(image.shape)
#创建五张38*38的图像


flatten的运用:将多维的数据(矩阵等)转化为一维的向量

flatten=nn.Flatten()
image_flat=flatten(image)
print(image_flat.shape)

nn.Dense为全连接层,使用w(权重)和b(偏差)为输入和输出进行图像的变换

layer1=nn.Dense(in_channels=38*38,out_channels=30)
hidden1=layer1(image_flat)
print(hidden1.shape)

注意in_channels和out_channels为输入该全连接层和输出该全连接层的

未添加ReLU激活函数:

添加了ReLU激活函数:

定义一个SequentialCell容器,来构建神经网络模型(相当于一个集成)

models1=nn.SequentialCell(
    flatten,
    layerl,
    nn.ReLU(),
    nn.Dense(30,10)#注意这里的30是要与layerl的输出相同
)

logits=models1(image)
print(f"okok{logits.shape}\n")

nn.Softmax

最后一个全连接层返回的是[0,1]里面的值

softmax=nn.Softmax(axis=1)
pred=softmax(logits)
print(f"em{pred}\n")

打印结果~~

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值