# 杂项技术

在网上购买的u盘往往会存在是扩容盘甚至是扩容TF卡的可能,对于这种U盘,最可恨的还不是其造假的纸面数据,而是其可能会带来的数据损失的风险。

下面简单介绍一下如何检测扩容盘以及如何修复扩容盘

扩容盘的检测

扩容盘的检测需要使用专业的工具,使用360或者电脑管家之类的工具往往是测不确的。我们一般可以通过两种方式来判断其是否是扩容盘: 1. 通过检测芯片型号来确定其真实的大小 2. 通过暴力填满来确定其真实的大小

通过检测芯片型号来确定其真实的大小

这是最简单的方式,但是也是最容易出错的方法之一。因为可以通过伪造芯片型号的技术日益高超,使得仅仅依靠型号检测来确认芯片的真实性变得不再可靠。

通过暴力填满来确定其真实的大小

一般会使用 mydisktest 来检测(图吧工具箱里面有) 这种方法是通过将U盘填满文件,以此来确定U盘的实际容量。这种方法虽然较为可靠,但耗时较长。

具体操作原理如下:

  1. 将文件持续写入u盘中
  2. 记录下所添加的文件的总大小,并且校验文件的完整性
  3. 通过校验所有文件存储的内容是否完整,我们可以知道u盘实际容量以及哪个片区存在问题。

还原扩容盘

一般有两种办法: 1. 修改U盘分区 2. 使用量产工具将U盘主控还原为真实大小

修改U盘分区的方法:

  1. 首先,我们需要下载一个分区工具,如DiskGenius。
  2. 将U盘插入电脑,打开DiskGenius软件,找到U盘所在的磁盘。
  3. 在磁盘列表中,右键点击U盘磁盘,选择“调整分区大小”选项。
  4. 在弹出的窗口中,选择“快速分区”,根据需要进行调整。
  5. 确认调整后,点击“保存更改”按钮,然后安全弹出U盘。

使用量产工具

  1. 查看U盘使用的芯片型号,可以使用这个软件:chipgenius(图吧工具箱-外设工具里面有)
  2. 下载对应的量产工具,可以查看网站:U盘量产工具,U盘量产工具下载大全_U盘量产网 (upantool.com)
  3. 将U盘插入电脑,运行量产工具,选择相应的U盘型号和量产方案。
  4. 在量产工具中,找到“容量调整”或“分区调整”选项,根据需要进行调整。
  5. 确认调整后,点击“开始量产”按钮,等待量产过程完成。
  6. 量产完成后,安全弹出U盘,即可看到U盘的实际容量。
阅读全文 »

[[pytorch:张量(tenser)]] #### 问题阐述

python的实现逻辑和内存回收机制挺奇怪的。实际上,当使用tensor类型的时候,其更像是存储了一个指针:

  • 创建变量的时候,先申请分配内存,然后再将变量指向其存储tensor的位置
  • 计算的时候,实际上是不是将其对应的值赋予过去,而是将位置赋予过去。

这就导致了一个问题:

1
2
3
before = id(x)
x = x + y
before == id(x)

输出:false

实际上,计算x+y的时候,系统先申请了一个内存空间,然后将计算结果放在这个空间内,最后将 x存储的位置改为这个内存空间的地址……

所有的变量都是存储在内存中的,如果x释放出来的内存没有被及时释放,这样就会带来很大的内存占用冗余,而这在本就对内存占用需求比较大的深度学习来说是致命的。

解决办法

所以说可以换一种写法,就可以使得其代码效率优化:

1
z[:] = x + y

这样的话,相当于将值进行了复写,而不是重复申请更换空间。而x+y产生的临时内存占用将会被赋值完之后被释放。

如果说,我们知道后面x中存储的数据不再会被使用了,也可以使用下面的写法:

1
x += y

[[pytorch]]

基础知识

导入

首先,我们导入torch

请注意,虽然它被称为PyTorch,但是代码中使用torch而不是pytorch

import torch

定义

张量表示一个由数值组成的数组,这个数组可能有多个维度

  • 具有一个轴的张量:向量(vector)
  • 具有两个轴的张量:矩阵(matrix)
  • 具有两个轴以上的张量没有特殊的数学名称

初始化声明

torch提供的接口

使用 arange 创建
  •   - x = torch.arange(12)
    
      - x
    
      - Copy to clipboard
    
      - tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
    • 这个行向量包含以0开始的前12个整数,它们默认创建为整数

    • 也可指定创建类型为浮点数

    • 张量中的每个值都称为张量的 元素(element)

      • 例如,张量 x 中有 12 个元素
    • 除非额外指定,新的张量将存储在内存中,并采用基于CPU的计算

全1/全0初始化张量
    • 全0

        - torch.zeros((2, 3, 4))
      
        - __________________
      
        - tensor([[[0., 0., 0., 0.],
      
        -          [0., 0., 0., 0.],
      
        -          [0., 0., 0., 0.]],
      
        -         [[0., 0., 0., 0.],
      
        -          [0., 0., 0., 0.],
      
        -          [0., 0., 0., 0.]]])
    • 全1

        - torch.ones((2, 3, 4))
      
        - __________________
      
        - tensor([[[1., 1., 1., 1.],
      
        -          [1., 1., 1., 1.],
      
        -          [1., 1., 1., 1.]],
      
        -         [[1., 1., 1., 1.],
      
        -          [1., 1., 1., 1.],
      
        -          [1., 1., 1., 1.]]])
随机/概率分布 初始化张量
    • 创建一个形状为(3,4)的张量,其中的每个元素都从均值为0、标准差为1的标准高斯分布(正态分布)中随机采样

       - >>>>>>>>>>>>>>>>>
      
       - torch.randn(3, 4)
      
       - ______________________
      
       - tensor([[-0.0135,  0.0665,  0.0912,  0.3212],
      
       -         [ 1.4653,  0.1843, -1.6995, -0.3036],
      
       -         [ 1.7646,  1.0450,  0.2457, -0.7732]])
使用包含数值的Python列表(或嵌套列表),来为所需张量中的每个元素赋予确定值
  • 在这里,最外层的列表对应于轴0,内层的列表对应于轴1

    • torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])


    • tensor([[2, 1, 4, 3],

    •     [1, 2, 3, 4],
    •     [4, 3, 2, 1]])

属性

通过张量的shape属性来访问张量沿每个轴的长度
- x.shape
如果只想知道,即形状的所有元素乘积,可以检查它的大小(size)
  • 因为这里在处理的是一个向量,所以它的shape与它的size相同
通过张量的numel()属性来访问张量中元素的总数
- x.numel()

变换

调用reshape函数改变一个张量的形状而不改变元素数量和元素值
    • 例如,可以把张量x从形状为(12,)的行向量转换为形状为(3,4)的矩阵

    • 这个新的张量包含与转换前相同的值,但是它被看成一个3行4列的矩阵

    • 要重点说明一下,虽然张量的形状发生了改变,但其元素值并没有变

    • 注意,通过改变张量的形状,张量的大小不会改变

    • X = x.reshape(3, 4)

    • X

    • Copy to clipboard

      • 我们不需要通过手动指定每个维度来改变形状

        • 幸运的是,我们可以通过-1来调用此自动计算出维度的功能

        • 即我们可以用x.reshape(-1,4)或x.reshape(3,-1)来取代 x.reshape(3,4)

我的思考

### tenser加法存在的问题 ![[tenser加法存在的问题]]

阅读全文 »

# d2l

概述

《动手学深度学习》 — 动手学深度学习 2.0.0 documentation (d2l.ai)

00 预告【动手学深度学习v2】-跟李沐学AI-【完结】动手学深度学习 PyTorch版-哔哩哔哩视频

这是一本面向中文读者的有关使用pytorch来实现基本的人工智能算法的书籍。李沐老师为其制作了教学视频

我打算以李沐老师的课为线索,以这本书作为参考,开始学习深度学习,然后进一步实现我自己想要实现的功能。

课时记录及概要:

  • [[d2l-0-配置环境]]
  • [[d2l-1-基础知识和数据处理]]
  • [[d2l-2-线性回归的简单实现]]
  • [[d2l-3-softmax回归]]
  • [[d2l-4-mlp多层感知机]]
  • [[d2l-4-overfit过拟合现象]]
阅读全文 »

[[作家]]

村上春树是我最喜欢的作家之一。我计划将他的书看完,然后下面是他的作品列表,也可以作为我的书评引索。

长篇小说

出版时间 日文书名 中文译名
1979年 风の歌を聴け 且听风吟
1980年 1973年のピンボール 一九七三年的弹子球
1982年 羊をめぐる冒険 寻羊冒险记
1985年 世界の终りとハードボイルド?ワンダーランド 世界尽头与冷酷仙境
1987年 ノルウェイの森 挪威的森林
1988年 ダンス?ダンス?ダンス 舞!舞!舞!
1992年 国境の南、太阳の西 国境以南太阳以西
1995年 ねじまき鸟クロニクル 奇鸟行状录
1999年 スプートニクの恋人 斯普特尼克恋人
2002年 海辺のカフカ 海边的卡夫卡
2004年 アフターダーク 天黑以后
2009年 1Q84 1Q84
2013年 色彩を持たない多崎つくると、彼の巡礼の年 没有色彩的多崎作和他的巡礼之年
2017年 骑士団长杀し 刺杀骑士团长
2023年 街とその不確かな壁 城市及其不确定的墙 [58]

短篇小说集

出版时间 日文书名 中文译名
1983年 中国行きのスロウ・ボート 去中国的小船
1984年
1985年 回転木马のデッド・ヒート 旋转木马鏖战记
1986年 パン屋再袭撃 再袭面包店
1990年 TVピープルの逆袭 电视人
1996年 レキシントンの幽霊 列克星敦的幽灵
2000年 神の子どもたちはみな踊る 神的孩子全跳舞
2005年 东京奇谭集 东京奇谭集
2005年 象の消灭 短篇选集 1980-1991 象的失踪短篇选集1980-1991年
2014年 女のいない男たち 没有女人的男人们
2020年 第一人称单数 [29]
阅读全文 »
0%