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) #返回一个元组
结果如图:大家自行体会
完结撒花