python 的 iter()、item()、items()三种方法

python 的 iter()、item()、items()三种方法

item() 方法

item() 方法是用来将只有一个元素的numpy数组或tensor张量转化为标量的方法

举个栗子

import numpy as np
a=['3']
b=np.array(a)
c=b.item()
print(b)
print(c)
print(type(c))

结果
在这里插入图片描述

import numpy as np
a=[3]
b=np.array(a)
c=b.item()
print(b)
print(c)
print(type(c))

结果如下
在这里插入图片描述

深度学习应用

net = Net()
# [w1, b1, w2, b2, w3, b3]
optimizer = optim.SGD(net.parameters(), lr=0.01, momentum=0.9)


train_loss = []

for epoch in range(3):

    for batch_idx, (x, y) in enumerate(train_loader):

        # x: [b, 1, 28, 28], y: [512]
        # [b, 1, 28, 28] => [b, 784]
        x = x.view(x.size(0), 28*28)
        # => [b, 10]
        out = net(x)
        # [b, 10]
        y_onehot = one_hot(y)
        # loss = mse(out, y_onehot)
        loss = F.mse_loss(out, y_onehot)

        optimizer.zero_grad()
        loss.backward()
        # w' = w - lr*grad
        optimizer.step()

        train_loss.append(loss.item())    #将loss 这个tensor转化为标量加到列表

        if batch_idx % 10==0:
            print(epoch, batch_idx, loss.item())

plot_curve(train_loss)

iter() 方法

iter() 函数用来生成迭代器
用法是这样:
iter(object[, sentinel])
object 是支持迭代的集合对象
sentinel – 如果传递了第二个参数,则参数 object 必须是一个可调用的对象(如,函数),此时,iter 创建了一个迭代器对象,每次调用这个迭代器对象的__next__()方法时,都会调用 object。

举个栗子

lst=['hello','Mr.Robot','Elliot']
for i in lst:
    print(i)

print('iter:')
for i in iter(lst):
    print(i)

输出:
在这里插入图片描述

实际应用

#train_db是训练数据集,是一个二维tensor
sample=next(iter(train_db))
print('sample:',sample[0].shape,sample[1].shape,
	  tf.reduce_min(sample[0]),tf.reduce_max(sample[0]))

items() 方法

Python 字典 items() 函数以列表返回可遍历的(键, 值) 元组数组。

返回值

把每一对键与值组成元组,然后以列表形式返回(其包含每一对元组)。

举个栗子

dict = {'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao': 'www.taobao.com'}

print(type(dict.items()))
print("字典值 : " ,dict.items())


for x in dict:
    print(x)

# 遍历字典列表
for key, values in dict.items():
    print(key,values)

for x in dict.items():
    print(x)   #返回一个元组

结果如图:大家自行体会
在这里插入图片描述

完结撒花

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值