python :高精度运算

0.设备问题

有时在计算的过程中在不同的设备之间来回赋值,可能导致误差(e-05与e-01的差距)。

1. 创建变量时,指名dtype ,如整数可选int64

int64 意思是64位整数(64bit interger), 相当于 long long 占8个字节 -9223372036854775808 ~ 9223372036854775807

a = np.array([6, 9], dtype=np.int64)

2. Decimal fixed point and floating point arithmetic

3. @专注于矩阵乘法de中缀算子A dedicated infix operator for matrix multiplication

4.torch.manual_seed生成随机数种子

在神经网络中,参数默认是进行随机初始化的。如果不设置的话每次训练时的初始化都是随机的,导致结果不确定。如果设置初始化,则每次初始化都是固定的。
设置随机种子是为了确保每次生成固定的随机数,这就使得每次实验结果显示一致了,有利于实验的比较和改进。

5.math.isclose()和cmath.isclose(),根据给定的两个值,绝对公差或相对公差来判断确定是否被认为是接近的

6. torch.nn.Module.double()

在网络构建完成之后使用net.double()可将将所有的浮点类型的参数和缓冲转换为(双浮点)double数据类型.
net.double()

7.相关链接

Function Signature Object

The one million limit

Data Classes

Minor API improvements for binary sequences

General purpose decorator clause (aka “@in” clause)

‎Adding a Rational Type to Python
Adding a Rational Literal to Python
Unifying Long Integers and Integers统一长整数和整数

重新设计 Python 的数值模型

日志模块

警告模块
numpy:@矩阵乘法,*矩阵point-wise乘
torch:@矩阵乘法,*矩阵point-wise乘
两个浮点变量相乘结果为什么不精确
浮点数为什么不精确?
为什么浮点数标准无法精确表示0.1?
参考1
[numpy] array和ndarray的区别:array是创建ndarray类型数据的方法。
实际项目相关的做法:
在一些项目交互中,前后端交互数据也可能出现问题,雪花算法ID,对应的后端Long类型,前端number类型,它们的精度不一样,导致精度丢失;解决:转成字符串返给前端

文本数据高精度打印

from decimal import *
import numpy as np
from matplotlib import pyplot as plt


def openreadtxt(file_name):
    loss1 = []
    loss2 = []
    loss3 = []
    file = open(file_name, 'r')  # 打开文件
    file_data = file.readlines()  # 读取所有行
    for row in file_data:
        find1 = "Loss"
        if find1 in row:
            # data.append(row)  # 将每行数据插入data中
            loss1.append( Decimal( row[17:25]) )
            loss2.append(Decimal(row[39:47])) # 使用 float(row[39:47])会有舍入误差
            loss3.append(Decimal(row[62:70]))# 防止舍入误差
    return loss1,loss2,loss3


if __name__ == "__main__":
    loss1,loss2,loss3 = openreadtxt('orilog.txt')
    print(loss1)
    print(loss2)
    print(loss3)
    # 绘图
    x = np.linspace(0, len(loss2), len(loss2))
    plt.plot(x, loss2, label="loss2", linewidth=1.5)
    plt.plot(x, loss3, label="loss3", linewidth=1.5)
    plt.xlabel("epoch")
    plt.ylabel("loss")
    plt.legend()
    plt.show()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值