ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

tensorflow(二十一):误差计算方法(MSE和交叉熵)

2021-04-02 22:36:24  阅读:400  来源: 互联网

标签:loss 二十一 print import tf tensorflow MSE logits


一、均方误差

 

 

 

 

 

 

 

 

 

import tensorflow as tf

x = tf.random.normal([2, 4])
w = tf.random.normal([4, 3])
b = tf.zeros([3])
y = tf.constant([2, 0])  #标签值

with tf.GradientTape() as tape:
    tape.watch([w, b])
    prob = tf.nn.softmax(x@w+b, axis=1)
    loss = tf.reduce_mean(tf.losses.MSE(tf.one_hot(y, depth=3), prob))

grads = tape.gradient(loss, [w, b])
print(grads[0], '\n')
print(grads[1])

二、交叉熵-Entropy

 

 

 

 

 

 

 

 

 

import tensorflow as tf

x = tf.random.normal([2, 4])  #2个4维样本
w = tf.random.normal([4, 3])
b = tf.zeros([3])
y = tf.constant([2, 0])    #2个样本的实际标签

with tf.GradientTape() as tape:
    tape.watch([w, b])
    logits = x @ w + b
    loss = tf.reduce_mean(tf.losses.categorical_crossentropy(tf.one_hot(y, depth=3), logits, from_logits = True))

grads = tape.gradient(loss, [w, b])
print("w的偏导数:\n", grads[0])
print("b的偏导数:\n", grads[1])

三、熵的概念

 

 

 

 

 

 

import tensorflow as tf
import os

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

a = tf.fill([4],0.25)
b = tf.math.log(a) / tf.math.log(2.)  #tensorflow中默认以e为底,变为2为底。
print(b)
print(-tf.reduce_sum(a*b).numpy())

a1 = tf.constant([0.1, 0.1, 0.1, 0.7])
b1 = tf.math.log(a1) / tf.math.log(2.)  #tensorflow中默认以e为底,变为2为底。
print(-tf.reduce_sum(a1*b1).numpy())

a2 = tf.constant([0.01, 0.01, 0.01, 0.97])
b2 = tf.math.log(a2) / tf.math.log(2.)  #tensorflow中默认以e为底,变为2为底。
print(-tf.reduce_sum(a2*b2).numpy())

 

 

 

 

 

 

import tensorflow as tf
import os

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

#函数大写形式
criteon = tf.losses.BinaryCrossentropy() #首先声明这样一个类,对instance做一个调用。
loss = criteon([1], [0.1])
print(loss)

#函数小写的形式。直接调用就可以了。
loss1 = tf.losses.binary_crossentropy([1],[0.1])
print(loss1)

 

 

 

 

 

 

 

 

import tensorflow as tf
import os

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

x = tf.random.normal([1,784])
w = tf.random.normal([784,2])
b = tf.zeros(2)
logits = x@w+b
print("前向传播结果:",logits.numpy())

prob = tf.math.softmax(logits, axis=1)
print("经过softmax数值为:",prob.numpy())

loss = tf.losses.categorical_crossentropy([0,1],logits,from_logits=True)
print("交叉熵数值为:{0}".format(loss))

 

标签:loss,二十一,print,import,tf,tensorflow,MSE,logits
来源: https://www.cnblogs.com/zhangxianrong/p/14612601.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有