在 Python 3.6+ 中,引入了 f-string(格式化字符串字面值),它是一种用于在字符串中嵌入表达式值的简洁、方便的方式。这种字符串以 f
或 F
作为前缀,并在字符串中使用 {}
表达式来引用变量或表达式的值。
例如,使用 f-string 可以在字符串中插入变量、表达式等,而无需使用传统的字符串拼接或格式化方法。在你提到的例子中:
epoch = 1 num_epochs = 10 loss = 0.1234 print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')
这个 f-string 包含了三个表达式:
{epoch+1}
:计算epoch+1
的值并插入字符串。{num_epochs}
:直接插入num_epochs
的值。{loss.item():.4f}
:计算loss.item()
的值并将其格式化为浮点数,保留小数点后四位。
f-string 之所以能够输出函数变量值,是因为它在字符串中使用 {}
表达式,这里的表达式可以是任意合法的 Python 表达式,包括函数调用。在这个例子中,loss.item()
是一个函数调用,它会返回一个值,而 f-string 会将这个值插入到字符串中。这样就避免了传统字符串拼接或格式化方法的繁琐,使代码更加简洁和可读。
print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')
这行代码使用了 Python 3.6+ 中的 f-string,其中各个部分的含义如下:
-
f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}'
是一个字符串,其中{}
是一个占位符,可以插入变量的值。 -
epoch+1
表示当前训练的轮次,epoch
是从0开始的,但是通常我们希望显示的轮次从1开始,所以加了1。 -
/
是一个分隔符,用于分隔当前轮次和总轮次。 -
num_epochs
是总的训练轮次。 -
loss.item()
获取当前批次的损失值,item()
是将 PyTorch 张量中的值转换为 Python 中的标量值。 -
:.4f
表示将损失值以浮点数的形式显示,并且保留小数点后四位。
所以,整体来说,这个 print 语句的作用是在每个训练轮次结束时输出当前轮次和对应的损失值。例如,可能输出类似于 Epoch [1/10], Loss: 0.1234
,其中 1 是当前轮次,10 是总轮次,0.1234 是当前轮次的损失值。