with tf.GradientTape() as tape: # with结构记录梯度信息
y = tf.matmul(x_train, w1) + b1 # 神经网络乘加运算
y = tf.nn.softmax(y) # 使输出y符合概率分布(此操作后与独热码同量级,可相减求loss)
y_ = tf.one_hot(y_train, depth=3) # 将标签值转换为独热码格式,方便计算loss和accuracy
loss = tf.reduce_mean(tf.square(y_ - y)) # 采用均方误差损失函数mse = mean(sum(y-out)^2)
print('loss 类型:\t',type(loss))
loss_all += loss.numpy() # 将每个step计算出的loss累加,为后续求loss平均值提供数据,这样计算的loss更准确
最后一行,loss.numpy()是干了啥,这是个啥函数,有啥用
因为这里的loss是tensor,所以调用loss.numpy()将其转换为numpy数组。这里最主要的原因是loss_all一开始不是tensor类型,如果loss_all是tensor类型,则可以不用loss.numpy()。进行类型转换,只是为了确保语法正确
没记错的话,是将tensor转成numpy.array
tensor.numpy()
会返回一个与tensor数据一致的numpy数组