2021年3月

1. torch.Tensor 生成一个 tensor 类型。

>>> import torch
>>> x=torch.Tensor([[1,2,3],[4,5,6]])
>>> x
tensor([[1., 2., 3.],
        [4., 5., 6.]])

参考: https://www.jianshu.com/p/314b6cfce1c3 https://pytorch-cn.readthedocs.io/zh/latest/package_references/Tensor/ https://blog.csdn.net/weixin_42018112/article/details/91383574

2. torch.nn.functional.softmax(input, dim=None, _stacklevel=3, dtype=None) 用于对设置的维度上的数进行收缩,让他的和为 1.

>>> import torch
>>> from torch import nn as nn
>>> input = torch.randn(2, 3, 4)
>>> input
tensor([[[-0.1335,  0.1574, -0.4618, -0.1629],
         [-1.1302, -0.2782,  0.2689,  1.4722],
         [ 1.8547,  3.0593,  1.7146, -0.4395]],

        [[-0.0102,  1.4679,  0.0138,  0.5245],
         [ 2.2345,  2.0089,  2.0074,  0.4197],
         [-1.4187, -0.0887,  0.9257,  0.2516]]])
>>> torch.nn.functional.softmax(input)
tensor([[[0.4692, 0.2124, 0.3833, 0.3346],
         [0.0334, 0.0922, 0.1495, 0.7413],
         [0.9635, 0.9588, 0.6876, 0.3338]],

        [[0.5308, 0.7876, 0.6167, 0.6654],
         [0.9666, 0.9078, 0.8505, 0.2587],
         [0.0365, 0.0412, 0.3124, 0.6662]]])
>>>
>>> torch.nn.functional.softmax(input, dim=0)
tensor([[[0.4692, 0.2124, 0.3833, 0.3346],
         [0.0334, 0.0922, 0.1495, 0.7413],
         [0.9635, 0.9588, 0.6876, 0.3338]],

        [[0.5308, 0.7876, 0.6167, 0.6654],
         [0.9666, 0.9078, 0.8505, 0.2587],
         [0.0365, 0.0412, 0.3124, 0.6662]]])
>>> torch.nn.functional.softmax(input, dim=1)
tensor([[[0.1153, 0.0504, 0.0841, 0.1452],
         [0.0426, 0.0326, 0.1746, 0.7447],
         [0.8421, 0.9171, 0.7413, 0.1101]],

        [[0.0936, 0.3415, 0.0923, 0.3757],
         [0.8835, 0.5866, 0.6779, 0.3383],
         [0.0229, 0.0720, 0.2298, 0.2860]]])
>>> torch.nn.functional.softmax(input, dim=2)
tensor([[[0.2482, 0.3320, 0.1788, 0.2410],
         [0.0479, 0.1122, 0.1939, 0.6460],
         [0.1885, 0.6287, 0.1638, 0.0190]],

        [[0.1232, 0.5403, 0.1262, 0.2103],
         [0.3626, 0.2894, 0.2889, 0.0591],
         [0.0487, 0.1843, 0.5081, 0.2589]]])

默认是对于第一维进行伸缩。 dim = 0, 0.4692 + 0.5308 = 1 dim = 1, 0.1153 + 0.0426 + 0.8421 = 1 dim = 2, 0.2482 + 0.3320 + 0.1788 + 0.2410 = 1

参考: https://blog.csdn.net/m0_46653437/article/details/111610571 https://pytorch.org/docs/master/nn.functional.html#torch.nn.functional.softmax https://blog.csdn.net/chengyq116/article/details/106893773

3. torch.clamp(input, min, max, *, out=None) → Tensor 用于限制数值的上限和下限,把所有数据限制在设定好的上下限之间。

>>> a = torch.randn(4)
>>> a
tensor([-1.7120,  0.1734, -0.0478, -0.0922])
>>> torch.clamp(a, min=-0.5, max=0.5)
tensor([-0.5000,  0.1734, -0.0478, -0.0922])

参考: https://pytorch.org/docs/stable/generated/torch.clamp.html

参考数目:

https://pytorch.apachecn.org/docs/1.0/tensors.html

1. np.array([127, 127, 127]) 生成一个一维数组 [127, 127, 127]。

参考: https://numpy.org/doc/stable/reference/generated/numpy.array.html

2. a = np.reshape(list(range(24)), (2, 3, 4)) reshape 的第二个参数是维度参数,比如这个是一个三维数组,行数 2 行,列数 3 行,每个单位 4 个元素。

参考: https://numpy.org/doc/stable/reference/generated /numpy.reshape.html?highlight=reshape#numpy.reshape

3. image = np.transpose(image, [2, 0, 1]) 矩阵转置,第二个参数是相应的维度变化。 原始的维度是 [0, 1, 2] 其他的都是需要转换的。比如这个 [2, 0, 1] 意思是 把 第三维的数据提取出来作为第一维的开头数据,第一维的数据提取出来放到第二维,第二维的数据放到第三维。

arr = np.arange(16)
matrix = arr.reshape(2, 2, 4)
print("matrix: ", matrix)

matrix_4 = matrix.transpose((2, 0, 1))
print("matrix 4: ", matrix_4)

输出结果为

matrix:  [ [ [ 0  1  2  3]
             [ 4  5  6  7] ]

           [ [ 8  9 10 11]
             [12 13 14 15] ] ]

matrix 4:  [ [ [ 0  4]
               [ 8 12]]

             [ [ 1  5]
               [ 9 13] ]

             [ [ 2  6]
               [10 14] ]

             [ [ 3  7]
               [11 15] ] ]

参考: https://blog.csdn.net/u012762410/article/details/78912667

4. np.expand_dims(a, axis) 第二个参数表示具体再那个地方增加一个维度。

import numpy as np

a = np.reshape(list(range(24)), (2, 3, 4))
a_new = np.expand_dims(a, axis=0)
print('a =', a)
print('a_new =', a_new)
print('a.shape = ', a.shape)
print('a_new.shape = ', a_new.shape)
a = [[[ 0  1  2  3]
      [ 4  5  6  7]
      [ 8  9 10 11]]

     [[12 13 14 15]
      [16 17 18 19]
      [20 21 22 23]]]

a_new = [[[[ 0  1  2  3]
           [ 4  5  6  7]
           [ 8  9 10 11]]

          [[12 13 14 15]
           [16 17 18 19]
           [20 21 22 23]]]]
a.shape =  (2, 3, 4)
a_new.shape =  (1, 2, 3, 4)
import numpy as np

a = np.reshape(list(range(24)), (2, 3, 4))
print('a =', a)
print('np.expand_dims(a, axis=1) =', np.expand_dims(a, axis=1))
print('np.expand_dims(a, axis=2) =', np.expand_dims(a, axis=2))
print('np.expand_dims(a, axis=3) =', np.expand_dims(a, axis=3))
print('a.shape = ', a.shape)
print('np.expand_dims(a, axis=1).shape =', np.expand_dims(a, axis=1).shape)
print('np.expand_dims(a, axis=2).shape =', np.expand_dims(a, axis=2).shape)
print('np.expand_dims(a, axis=3).shape =', np.expand_dims(a, axis=3).shape)
a = [[[ 0  1  2  3]
      [ 4  5  6  7]
      [ 8  9 10 11]]

     [[12 13 14 15]
      [16 17 18 19]
      [20 21 22 23]]]
np.expand_dims(a, axis=1) = [[[[ 0  1  2  3]
                               [ 4  5  6  7]
                               [ 8  9 10 11]]]

                             [[[12 13 14 15]
                               [16 17 18 19]
                               [20 21 22 23]]]]
np.expand_dims(a, axis=2) = [[[[ 0  1  2  3]]
                              [[ 4  5  6  7]]
                              [[ 8  9 10 11]]]

                             [[[12 13 14 15]]
                              [[16 17 18 19]]
                              [[20 21 22 23]]]]
np.expand_dims(a, axis=3) = [[[[ 0]
                               [ 1]
                               [ 2]
                               [ 3]]

                              [[ 4]
                               [ 5]
                               [ 6]
                               [ 7]]

                              [[ 8]
                               [ 9]
                               [10]
                               [11]]]

                             [[[12]
                               [13]
                               [14]
                               [15]]

                              [[16]
                               [17]
                               [18]
                               [19]]

                              [[20]
                               [21]
                               [22]
                               [23]]]]
a.shape =  (2, 3, 4)
np.expand_dims(a, axis=1).shape = (2, 1, 3, 4)
np.expand_dims(a, axis=2).shape = (2, 3, 1, 4)
np.expand_dims(a, axis=3).shape = (2, 3, 4, 1)

参考: https://blog.csdn.net/weixin_41560402/article/details/105289015

5. .astype(np.float32) 转换数据类型。

参考: https://blog.csdn.net/qq_34638161/article/details/102853276

6. np.concatenate() 对数列或者矩阵进行合并。

import numpy as np
a=[1,2,3]
b=[4,5,6]
np.concatenate((a,b),axis=0)
array([1, 2, 3, 4, 5, 6])

参考: https://www.jianshu.com/p/a094a954ff61

7. numpy 和 list 互转

numpy -> list: array.tolist() list -> numpy: numpy.array(list) 参考: https://www.cnblogs.com/WMT-Azura/p/11138084.html

参考数目: https://www.runoob.com/numpy/numpy-array-manipulation.html https://numpy.org/doc/stable/user/c-info.html https://numpy.org.cn/article/advanced/numpy_exercises_for_data_analysis.html#numpy%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E9%97%AE%E7%AD%94

1. .SessionOptions 生成一个配置, 打印 log 的多少:0:Verbose, 1:Info, 2:Warning. 3:Error, 4:Fatal. Default is 2.

sess_config = ort.SessionOptions()
sess_config.log_severity_level = 3

2. .InferenceSession(path_or_bytes, sess_options=None, providers=None, provider_options=None) 加载模型

self.sess = ort.InferenceSession(onnx_file, sess_options=sess_config)

3. sess.run(["Y"], {"X": ortvalue}) 第二个参数里面的 ortvalue 就是图像数据。

参考: https://www.onnxruntime.ai/python/api_summary

  1. 打开指定网站
  2. F12 或者 command+option+i
  3. storage 标签页
  4. cookies的栏目下,右键相应网站,选择 delete all

上面只是单次清除,如果想要不保存指定网站缓存,需要下面这样做。

  1. 打开指定网站
  2. F12 或者 command+option+i
  3. nework 标签页
  4. 勾选右侧的 disable cache

参考: https://www.huoduan.com/clear-301-cache.html

正常回调函数使用的是普通函数或者静态函数,而成员函数因为会在参数列表最前面插入一个 this 指针,所以导致直接使用会报错。成员函数想要被调用需要使用特殊的操作方法。

- 阅读剩余部分 -

1. 发送信号

在发送的头文件中标明需要发送的信号

    Q_OBJECT    //必须使用宏Q_OBJECT
signals:                    //使用signals声明信号函数,访问级别为protected
    void testSignal(int v);     //信号只能声明不能定义

在源文件中,函数内部可以通过 emit 来发送这个信号

emit testSignal(i);     //通过emit关键字发射信号

2. 接收信号的槽

在接收头文件中标明槽函数

    Q_OBJECT
protected slots:
    void mySlot(int v)
    {
        qDebug() << "Value: " << v;
    }

3. 绑定信号和槽

在类似于 mainwindow 这样的上层文件中,需要拿到包含信号的实例和包含槽的实例,然后把信号和对应的槽通过 connect 绑定在一起。

    TestSignal t;
    RxClass r;

    //信号函数与槽函数需要一致,并且不出现参数名
    QObject::connect(&t, SIGNAL(testSignal(int)), &r, SLOT(mySlot(int)));

参考: https://blog.csdn.net/small_prince_/article/details/96106202

1. 下载模板

typecho 网上有很多模板可以下载。也有专门的模板网站 https://typecho.me/ ,找到喜欢的模板,还可以点击上面的在线演示,直接看看效果。满意了之后,点击模板下载即可。

2. 使能模板

把下载下来的模板文件解压,并放入 网站目录下的 usr/themems 里面,并从网站界面上选中相应的模板,并使能。 这个模板还可以 https://typecho.me/1499.html, https://github.com/dingzd1995/typecho-theme-waxy.

3. 启用模板后可能碰到问题,

比如报错: Call to undefined function mb_strlen() . 这是因为 php 默认不开启这个。 ubuntu 需要安装 mbstring,通过命令 sudo apt install php7.0-mbstring && sudo service nginx reload 即可安装这个功能,并重启 nginx。刷新网页恢复正常。

参考: https://stackoverflow.com/questions/6419102/fatal-error-call-to-undefined-function-mb-strlen https://github.com/dingzd1995/typecho-theme-waxy https://typecho.me/1528.html https://github.com/javabullshit/pihpi

1. 备份模板

把 网站目录下的 usr/themes 中的 default 文件夹复制一份,重命名一下,并把里面的 index.php 中开头的注释部分修改一下。这些注释会显示在模板选择界面。

2. 添加标签云

修改刚才新的模板下面的 sidebar.php,按照官网 http://docs.typecho.org/themes/tag-cloud 中的说明,把代码添加到文件里面。

3. 启用新模板

到管理界面里面,模板选择中选择刚才修改过的模板并启用,刷新网站页面,右边就显示出标签云了。

4. 彩色云

可以参考网上的资源,继续修改代码,实现彩色云功能。

参考: http://docs.typecho.org/themes/tag-cloud https://txisfine.cn/archives/9ec612e3 https://iymark.com/website/typecho-color-tags.html http://luly.lamost.org/blog/typecho_tag_cloud.html https://iymark.com/website/typecho-color-tags.html https://cloud.tencent.com/developer/article/1405647