本篇文章为一些常见、不容易理解的张量运算。
对应视频04--07:
1.用 arange
创建一个行向量x
2.更改x形状 reshape
3.通过张量的shape
属性来访问张量(沿每个轴的长度)的形状
深入理解,x有1个维度,y有2个维度,z有3个维度
4. len与numel
5. -1与:
6.按轴求和--降维
z有三个维度,axis=0,按第一个维度求和,第2、3个维度不变
非降维,keepdims
7.求范数
torch.norm()
对应视频08:
对以下代码段的理解
# 小批量数据读取
def data_iter(batch_size, features, labels):
num_examples = len(features) # num_examples为X中的行数 即多少组数据
indices = list(range(num_examples)) # 生成索引列表[1,2,3,....,500]
random.shuffle(indices) # 随机读取索引 [23,42,103,....,487]
for i in range(0, num_examples, batch_size): # 步长为batch_size
batch_indices = torch.tensor( # 生成数据块,从列表的第i个元素到i+batch_size的元素即每次取10个
indices[i: min(i + batch_size, num_examples)]) # 例 第一次取到[23,42,103,....,368]
yield features[batch_indices], labels[batch_indices] # 不断返回features和batch_indices中第23,42,103,....,368行数据
对应视频09
1.对代码
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size) # 加载所有数据,每256个为一组
的理解
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size) # 加载所有数据,每256个为一组
print(len(train_iter))
输出 235
2.对train_epoch_ch3中代码
for X, y in train_iter:
print(X.shape)
print(y.shape)
print(y)
的理解,X.shape对应print的为
y.shape对应print的为:
y对应的print为:
综合以上, train_iter中为235个数据块X,其中234个[256,1,28,28],1个[96,1,28,28]。
60000=234*256+96 60000为图片总数。共235个y,每个y中有256个值,每个值对应真实的种类。
3.对 accuracy(y_hat, y)中代码
y_hat = y_hat.argmax(axis=1) # 将y_hat每一行最大的值的索引取出放入y_hat
的理解
对应视频10
对激活函数relu的理解