GVKun编程网logo

[PyTorch] PyTorch/python 常用语法 / 常见坑点(pytorch基本语法)

1

在这篇文章中,我们将为您详细介绍[PyTorch]PyTorch/python常用语法/常见坑点的内容,并且讨论关于pytorch基本语法的相关问题。此外,我们还会涉及一些关于5.箭头函数_this指

在这篇文章中,我们将为您详细介绍[PyTorch] PyTorch/python 常用语法 / 常见坑点的内容,并且讨论关于pytorch基本语法的相关问题。此外,我们还会涉及一些关于5. 箭头函数_this 指向_es6 常用语法、CSS3 常用语法、Easyui 常用语法-Checkbox、Easyui 常用语法-其他的知识,以帮助您更全面地了解这个主题。

本文目录一览:

[PyTorch] PyTorch/python 常用语法 / 常见坑点(pytorch基本语法)

[PyTorch] PyTorch/python 常用语法 / 常见坑点(pytorch基本语法)

[TOC]

1. make_grid()

2. join 与 os.path.join ()

1.join()函数

语法:‘sep’.join(seq)

参数说明:

sep:分隔符。可以为空

seq:要连接的元素序列、字符串、元组、字典等

上面的语法即:以 sep 作为分隔符,将 seq 所有的元素合并成一个新的字符串

返回值:返回一个以分隔符 sep 连接各个元素后生成的字符串

2、os.path.join () 函数

语法:  os.path.join (path1 [,path2 [,......]])

返回值:将多个路径组合后返回

注:第一个绝对路径之前的参数将被忽略

3. 读文件写文件

https://www.cnblogs.com/ymjyqsx/p/6554817.html

4. json 操作

详细内容 1 详细内容 2) json.dumps 将 Python 对象编码成 JSON 字符串 json.loads 将已编码的 JSON 字符串解码为 Python 对象 引入 json

import json

常用有 2 个方法,也是最基本的使用方法: 1、dumps:把字典转成 json 字符串 2、loads:把 json 字符串转成字典

#coding:utf-8
import json
 
test_dict = {''a'':1, ''b'':2}
 
#把字典转成json字符串
json_text = json.dumps(test_dict)
print(json_text)
 
#把json字符串转成字典
json_dict = json.loads(json_text)
print(json_dict)

当然,我写的例子所使用的字典也比较简单。大家可以尝试拟一个复杂的,包含数组的字典。

若你尝试使用 dir 方法看 json 模块有什么方法时,会发现还有 load、dump 方法。这两个方法和上面两个方法少了一个字母 s。 这两个方法是为了读写 json 文件提供的便捷方法。举个栗子,json 字符串可以保存到文本文件。若只是使用 loads 和 dumps,代码如下所示。 注意:以下代码涉及到 utf-8 文件读写,可以参考我前面的文章:Python 读写 utf-8 的文本文件 1、把字典转成 json 字符串,并保存到文件中

#coding:utf-8
import json
import codecs
 
test_dict = {''a'':1, ''b'':2}
 
#把字典转成json字符串
json_text = json.dumps(test_dict)
 
#把json字符串保存到文件
#因为可能json有unicode编码,最好用codecs保存utf-8文件
with codecs.open(''1.json'', ''w'', ''utf-8'') as f:
    f.write(json_text)

2、从 json 文件中读取到字典中

#coding:utf-8
import json
import codecs
 
#从文件中读取内容
with codecs.open(''1.json'', ''r'', ''utf-8'') as f:
    json_text = f.read()
 
#把字符串转成字典
json_dict = json.loads(json_text)

上面代码,我们可以用 load 和 dump 修改。 1、dump 把字典转成 json 字符串并写入到文件

#coding:utf-8
import json
import codecs
 
test_dict = {''a'':1, ''b'':2}
 
#把字典转成json字符串并写入到文件
with codecs.open(''1.json'', ''w'', ''utf-8'') as f:
    json.dump(test_dict, f)

2、load 从 json 文件读取 json 字符串到字典

#coding:utf-8
import json
import codecs
 
#从json文件读取json字符串到字典
with codecs.open(''1.json'', ''r'', ''utf-8'') as f:
    json_dict = json.load(f)

这样明显省事很多。

最后,再说一个知识点。如何把 json 转成有序的字典。 众所周知,字典是无序的。所以 json 的 loads 方法转换得来的字典本来就是无序的。 但出于某种需求,需要确保顺序正常,按照原本 json 字符串的顺序。 这个需要在解析的时候,把无序字典换成有序字典。如下代码:

#coding:utf-8
from collections import OrderedDict
import json
 
json_text = ''{ "b": 3, "a": 2, "c": 1}''
 
json_dict = json.loads(json_text)
print(u"转成普通字典")
for key, value in json_dict.items():
    print("key:%s, value:%s" % (key, value))
    
json_dict = json.loads(json_text, object_pairs_hook=OrderedDict)
print(u"\n转成有序字典")
for key, value in json_dict.items():
    print("key:%s, value:%s" % (key, value))

5. tensorboard 使用

在使用 GPU 进行训练的时候,要安装 tensorflow 与 tensorflow-gpu, 有的可能需 cuda 和 cudnn 不匹配,所以注意选好版本,安装好可以开另一个 terminal 运行 tensorboard --logdir = 日志地址相对路径, 然后在本地游览器输入:服务器 ip:6006 即可

6. python shutil.move 移动文件


#复制文件:
shutil.copyfile("oldfile","newfile") #oldfilenewfile都只能是文件
shutil.copy("oldfile","newfile") #oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
 
#复制文件夹:
shutil.copytree("olddir","newdir") #olddirnewdir都只能是目录,且newdir必须不存在
 
#重命名文件(目录)
os.rename("oldname","newname") #文件或目录都是使用这条命令
 
#移动文件(目录)
shutil.move("oldpos","newpos") 
shutil.move("D:/知乎日报/latest/一张优惠券,换你的通讯录信息,你愿意吗?.pdf", "D:/知乎日报/past/")

7. numpy.squeeze () 函数

1)a 表示输入的数组; 2)axis 用于指定需要删除的维度,但是指定的维度必须为单维度,否则将会报错; 3)axis 的取值可为 None 或 int 或 tuple of ints, 可选。若 axis 为空,则删除所有单维度的条目; 4)返回值:数组 5) 不会修改原数组;

8. numpy 中 transpose 和 swapaxes

详细 transpose () 这个函数如果括号内不带参数,就相当于转置,和.T 效果一样,而今天主要来讲解其带参数。 我们看如下一个 numpy 的数组:

arr=np.arange(16).reshape((2,2,4)) 
arr= 
array([[[ 0, 1, 2, 3], 
[ 4, 5, 6, 7]], 
[[ 8, 9, 10, 11], 
[12, 13, 14, 15]]])

那么有:

arr.transpose(2,1,0)
array([[[ 0,  8],
        [ 4, 12]],

       [[ 1,  9],
        [ 5, 13]],

       [[ 2, 10],
        [ 6, 14]],

       [[ 3, 11],
        [ 7, 15]]])

为什么会是这样的结果呢,这是因为 arr 这个数组有三个维度,三个维度的编号对应为 (0,1,2), 比如这样,我们需要拿到 7 这个数字,怎么办,肯定需要些三个维度的值,7 的第一个维度为 0,第二个维度为 1,第三个 3,所以 arr [0,1,3] 则拿到了 7

arr[0,1,3]  #结果就是7

这下应该懂了些吧,好,再回到 transpose () 这个函数,它里面就是维度的排序,比如我们后面写的 transpose (2,1,0),就是把之前第三个维度转为第一个维度,之前的第二个维度不变,之前的第一个维度变为第三个维度,好那么我们继续拿 7 这个值来说,之前的索引为 [0,1,3],按照我们的转换方法,把之前的第三维度变为第一维度,之前的第一维度变为第三维度,那么现在 7 的索引就是 (3,1,0) 同理所有的数组内的数字都是这样变得,这就是 transpose () 内参数的变化。 理解了上面,再来理解 swapaxes () 就很简单了,swapaxes 接受一对轴编号,其实这里我们叫一对维度编号更好吧,比如:

arr.swapaxes(2,1)  #就是将第三个维度和第二个维度交换
array([[[ 0,  4],
        [ 1,  5],
        [ 2,  6],
        [ 3,  7]],

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

还是那我们的数字 7 来说,之前的索引是 (0,1,3), 那么交换之后,就应该是 (0,3,1) 多说一句,其实 numpy 高维数组的切片也是这样选取维度的。 这就是 transpose 和 swapaxes 函数的讲解了

9. inplace 操作

in-place operation 在 pytorch 中是指改变一个 tensor 的值的时候,不经过复制操作,而是直接在原来的内存上改变它的值。可以把它成为原地操作符。

在 pytorch 中经常加后缀 “” 来代表原地 in-place operation,比如说.add() 或者.scatter ()。python 里面的 +=,*= 也是 in-place operation。

ReLU 函数有个 inplace 参数,如果设为 True,它会把输出直接覆盖到输入中,这样可以节省内存 / 显存。之所以可以覆盖是因为在计算 ReLU 的反向传播时,只需根据输出就能够推算出反向传播的梯度。但是只有少数的 autograd 操作支持 inplace 操作(如 variable.sigmoid_()),除非你明确地知道自己在做什么,否则一般不要使用 inplace 操作。

10. torch.nn.MaxUnpool2d()

class torch.nn.MaxUnpool2d(kernel_size, stride=None, padding=0)

Maxpool2d 的逆过程,不过并不是完全的逆过程,因为在 maxpool2d 的过程中,一些最大值的已经丢失。 MaxUnpool2d 的输入是 MaxPool2d 的输出,包括最大值的索引,并计算所有 maxpool2d 过程中非最大值被设置为零的部分的反向。

注意: MaxPool2d 可以将多个输入大小映射到相同的输出大小。因此,反演过程可能会变得模棱两可。 为了适应这一点,可以在调用中将输出大小(output_size)作为额外的参数传入。具体用法,请参阅下面示例

参数:

kernel_size (int or tuple) - max pooling 的窗口大小 stride (int or tuple, optional) - max pooling 的窗口移动的步长。默认值是 kernel_size padding (int or tuple, optional) - 输入的每一条边补充 0 的层数 输入: input: 需要转换的 tensor indices:Maxpool1d 的索引号 output_size: 一个指定输出大小的 torch.Size

大小: input: (N,C,H_in,W_in) output:(N,C,H_out,W_out)

Hout=(Hin1)stride[0]2padding[0]+kernelsize[0]

Wout=(Win1)stride[1]2padding[1]+kernelsize[1]

也可以使用 output_size 指定输出的大小

>>> pool = nn.MaxPool2d(2, stride=2, return_indices=True)
>>> unpool = nn.MaxUnpool2d(2, stride=2)
>>> input = Variable(torch.Tensor([[[[ 1,  2,  3,  4],
    ...                                  [ 5,  6,  7,  8],
    ...                                  [ 9, 10, 11, 12],
    ...                                  [13, 14, 15, 16]]]]))
>>> output, indices = pool(input)
>>> unpool(output, indices)
    Variable containing:
    (0 ,0 ,.,.) =
       0   0   0   0
       0   6   0   8
       0   0   0   0
       0  14   0  16
    [torch.FloatTensor of size 1x1x4x4]

>>> # specify a different output size than input size
>>> unpool(output, indices, output_size=torch.Size([1, 1, 5, 5]))
    Variable containing:
    (0 ,0 ,.,.) =
       0   0   0   0   0
       6   0   8   0   0
       0   0   0  14   0
      16   0   0   0   0
       0   0   0   0   0
    [torch.FloatTensor of size 1x1x5x5]

11. pytorch learning rate decay

本文主要是介绍在 pytorch 中如何使用 learning rate decay. 先上代码:

def adjust_learning_rate(optimizer, decay_rate=.9):
    for param_group in optimizer.param_groups:
        param_group[''lr''] = param_group[''lr''] * decay_rate

什么是 param_groups? optimizer 通过 param_group 来管理参数组.param_group 中保存了参数组及其对应的学习率,动量等等。所以我们可以通过更改 param_group [''lr''] 的值来更改对应参数组的学习率.

# 有两个`param_group`即,len(optim.param_groups)==2
optim.SGD([
                {''params'': model.base.parameters()},
                {''params'': model.classifier.parameters(), ''lr'': 1e-3}
            ], lr=1e-2, momentum=0.9)

#一个参数组
optim.SGD(model.parameters(), lr=1e-2, momentum=.9)

12. os.walk

1. 载入 要使用 os.walk, 首先要载入该函数 可以使用以下两种方法

  • import os
  • from os import walk

2. 使用 os.walk 的函数声明为: walk (top, topdown=True, onerror=None, followlinks=False) 参数

  • top 是你所要便利的目录的地址
  • topdown 为真,则优先遍历 top 目录,否则优先遍历 top 的子目录 (默认为开启)
  • onerror 需要一个 callable 对象,当 walk 需要异常时,会调用
  • followlinks 如果为真,则会遍历目录下的快捷方式 (linux 下是 symbolic link) 实际所指的目录 (默认关闭)

os.walk 的返回值是一个生成器 (generator), 也就是说我们需要不断的遍历它,来获得所有的内容。 每次遍历的对象都是返回的是一个三元组 (root,dirs,files)

  • root 所指的是当前正在遍历的这个文件夹的本身的地址
  • dirs 是一个 list ,内容是该文件夹中所有的目录的名字 (不包括子目录)
  • files 同样是 list , 内容是该文件夹中所有的文件 (不包括子目录)

如果 topdown 参数为真,walk 会遍历 top 文件夹,与 top 文件夹中每一个子目录。 常用用法:

def get_files(mydir):
    res = []
    for root, dirs, files in os.walk(mydir, followlinks=True):
        for f in files:
            if f.endswith(".jpg") or f.endswith(".png") or f.endswith(".jpeg") or f.endswith(".JPG"):
                res.append(os.path.join(root, f))
    return res

13. replace

语法: str.replace (old, new [, max])

参数

  • old – 这是要进行更换的旧子串。
  • new – 这是新的子串,将取代旧的子字符串(子串可以为空)。
  • max – 如果这个可选参数 max 值给出,仅第一计数出现被替换。 返回值 此方法返回字符串的拷贝与旧子串出现的所有被新的所取代。如果可选参数最大值给定,只有第一个计数发生替换。
str = "this is string example....wow!!! this is really string";
print str.replace("is", "was");
print str.replace("is", "was", 3);

5. 箭头函数_this 指向_es6 常用语法

5. 箭头函数_this 指向_es6 常用语法

1. 箭头函数

函数的简写方式

() => {}

只有一个参数时,可以省略() ---- x => {}

只有一条语句时,可以省略{},此时这点语句的结果会作为函数的返回值返回  () => console.log(''hello'');

特点:

箭头函数没有自己的 this,与离他最近的一层包裹它的函数的 this 一致,如果没有函数就指向 window

箭头函数没有 prototype 属性,有 __proto__ 属性

箭头函数不能 new 调用

箭头函数不能强制修改 this 指向

2. 谈谈 this

foo()  window

obj.foo()  obj

foo.call(obj)  obj

new foo()  实例对象

箭头函数的 this 与离他最近的一层包裹它的函数的 this 一致,如果没有函数就指向 window

DOM事件  dom元素

定时器   window

3. promise

解决异步编程的一个方案/技术

解决异步编程,以同步的方式表达异步的代码, 从而解决回调地狱的问题

promise 对象有 3 种状态

初始化状态(默认情况下) pending 准备

成功的状态 (一旦变成成功的状态就会立即触发成功的回调)  fullfilled

失败的状态 (一旦变成失败的状态就会立即触发失败的回调)  rejected

使用:

new Promise((resolve, reject) => {异步代码})

Promise.resolve/reject()

Promise.all([promise1, promise2...])

promsie.then(捕获成功的状态,执行成功的回调函数).catch(捕获失败的状态,执行失败的回调函数)

4. async 函数修饰关键字

用来定义函数,真正解决回调地狱的问题,异步编程的最终解决方案

await Promise对象;

只能在 async 函数中使用

后面必须跟着 promise 对象,async 函数返回值也是pormise对象

当 promise 对象状态是初始化状态,await 会等待,直到变成成功/失败才会接着运行

await等待promise对象变成成功时,会将其返回值返回到左边去,可被变量接收

5. ES6 其他常用的语法

解构赋值

形参默认值

模板字符串 `${js 代码将被执行}`

简化对象的写法

三点运算符

Symbol 新的数据类型

iterator 新的接口,提供统一的遍历方法 for of

 

CSS3 常用语法

CSS3 常用语法

1. CSS3 边框:

  • border-radius:圆角
  • box-shadow:阴影
  • border-image:以图片作为边框
  • 注意:每个半径的四个值的顺序是:左上角,右上角,右下角,左下角。如果省略左下角,右上角是相同的。如果省略右下角,左上角是相同的。如果省略右上角,左上角是相同的。

2. CSS3 背景:

  • background-image:背景图片(不同的背景图像和图像用逗号隔开,所有的图片中显示在最顶端的为第一张。)-->
  • background-size: 重新在不同的环境中指定背景图片的大小。可以根据像素或百分比指定大小。指定的大小是相对于父元素的宽度和高度的百分比的大小。
  • background-origin:指定了背景图像的位置区域(content-box, padding-box, 和 border-box)
  • background-clip:背景剪裁属性是从指定位置开始绘制(padding-box、content-box)

3. CSS3 渐变(下面只是标准语法,使用的时候注意各个浏览器):

  • 线性渐变(Linear Gradients)- 向下 / 向上 / 向左 / 向右 / 对角方向 =
    • 语法:background: linear-gradient(directioncolor-stop1color-stop2, ...);
      • 从上倒下(默认):background: linear-gradient (red, blue);
      • 从左到右: background:linear-gradient (to right,red,blue);
      • 对角(从左上角到右下角):background: linear-gradient (to bottom right, red, blue);
  • 径向渐变(Radial Gradients)- 由它们的中心定义

 

Easyui 常用语法-Checkbox

Easyui 常用语法-Checkbox

1.CheckBox隐藏与显示

$(function () {
            $("input").on("click", function () {
                var other = document.getElementById("").value;
                //alert(other);
                //alert(txt);
                if (other != "on") {
                    $("#").next().hide();
                    //txt = "block";
                    alert(other + "11111");
                    alert(txt + "11111");
                }
            }
           )
        })

2.CheckBox Change事件

$(function () {
            $("#").change(function () {
                var val = $(this).prop("checked");
                if (val)
                {
                    alert(val);
                    $("#").attr("disabled", true);
                    $("#").attr("disabled", true);
                    $("#").attr("disabled", true);
                    $("#").attr("disabled", true);
                    $("#").attr("disabled", true);
                    $("#").next().hide();
                }
                else
                {
                    alert(val+"11111111111");
                    $("#").attr("disabled", false);
                    $("#").attr("disabled", false);
                    $("#").attr("disabled", false);
                    $("#").attr("disabled", false);
                    $("#").attr("disabled", false);
                    $("#").attr("disabled", false);
                    $("#").next().hide();
                }
            });

2.CheckBox 禁止多选
        $(function () {
            $("#").change(function () {
                //var id = document.getElementsByName("").constructor;
                var val = $(this).prop("checked");
                if (val) {
                    var = $('input[name=]').val();
                    //$('input[name=]').attr("disabled", true);
                    $("input[name=]").prop("disabled", true);
                    $("input[name=]").prop("disabled", true);
                    $("input[name=]").prop("disabled", true);
                    $("input[name=]").prop("disabled", true);
                    $("input[name=]").prop("disabled", true);

                    $("#").next().show();
                    $('#').textBox('readonly', false);
                    $("#").textBox({ required: true });
                    $('#').checkBox('disableValidation')//在弹出窗体的方法里先去除验证的样式
                    $('#').checkBox('enableValidation')//在保存的方法里再加上需要验证的样式
                }
                else {
                    $("input[name=]").prop("disabled", false);
                    $("input[name=]").prop("disabled", false);
                    $("input[name=]").prop("disabled", false);
                    $("input[name=]").prop("disabled", false);
                    $("input[name=]").prop("disabled", false);
                    $("input[name=]").prop("disabled", false);
                    $("#").next().hide();
                    //$("#").("disabled", true);
                    $('#').textBox('readonly', true);
                    $("#").textBox({ required: false });
                    $("#").textBox({ required: false });
                    $("#").textBox('setValue', '')//清空文本框
                }
            });
        })    

3.CheckBox 只能选择一个

$(function checkCheckBox() {
            $('#').find('input[id=]').bind('click', function () {
                var id = $(this).attr("id");
                var name = $(this).attr("name");
                if (name == "" || name == "" || name == "" || name == "") {
                    $("#").textBox({ required: false });
                }
                else {
                    $("#").textBox({ required: true });
                }
                //当前的checkBox是否选中
                if (this.checked) {
                    //除当前的checkBox其他的都不选中
                    $("#fm").find('input[id=]').not(this).attr("checked", false);
                    //选中的checkBox数量
                    var selectleng = $("input[id='']:checked").length;

                    console.log("选中的checkBox数量" + selectleng);
                } else {
                    //未选中的处理
                    console.log("未选中的处理");
                }
            });
        })

Easyui 常用语法-其他

Easyui 常用语法-其他

1.判断时间
$(function () {
            $("#").datetimeBox({
                onHidePanel: function () {//dateBox把onHidePanel换成onSelect
                    onChangeStartTime();
                }
            });

            $("#").datetimeBox({
                onHidePanel: function () {//dateBox把onHidePanel换成onSelect
                    onChangeEndTime();
                }
            });
        });

        function onChangeStartTime() {
            //var v = $('#').datetimeBox('getValue');
            //alert(v);
            var startTime = $("#").val();//开始时间
            var endTime = $("#").val();//结束时间
            if (startTime != null && startTime != "" && endTime != null && endTime != "") {
                if (startTime > endTime) {
                    $.messager.alert('提示', '!');
                    $('#').datetimeBox('setValue', '');
                    return;
                }
            }
        }

        function onChangeEndTime() {
            var startTime = $("#").val();//开始时间
            var endTime = $("#").val();//结束时间
            if (startTime != null && startTime != "" && endTime != null && endTime != "") {
                if (startTime > endTime) {
                    $.messager.alert('提示', '!');
                    $('#').datetimeBox('setValue', '');
                    return;
                }
            }
        }

2.获取textBox的值

var = $('#').val();

3.获取comboBox的值

var = $("#").comboBox('getValue');

//alert(JSON.stringify(data));
//alert(data);  //alert(data[0].);
 

4.根据Name,Id获取控件的值

var = $('input[name=]').val();

$("input[name=]").prop("disabled", true);

$("#").next().show();

$('#').textBox('readonly', false);

$("#").textBox({ required: true });

document.getElementById("").checked = false;

关于[PyTorch] PyTorch/python 常用语法 / 常见坑点pytorch基本语法的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于5. 箭头函数_this 指向_es6 常用语法、CSS3 常用语法、Easyui 常用语法-Checkbox、Easyui 常用语法-其他等相关知识的信息别忘了在本站进行查找喔。

本文标签: