Tensorflow 张量运算:tf.softmax()

def softmax(logits, axis=None, name=None):
'''
Computes softmax activations.
This function performs the equivalent of
softmax = tf.exp(logits) / tf.reduce_sum(tf.exp(logits), axis)
'''
import tensorflow as tf 
# 用正态分布来模拟100个样本的预测结果,可以认为是100个MNIST样本
# out = tf.random.normal([100,10])
out = tf.constant([[1.,2,3],
[2,0,1]])
# 计算每一行转换为概率,输出
exp = tf.exp(out)
'''输出
tf.Tensor(
[[ 2.7182817  7.389056  20.085537 ]
 [ 7.389056   1.         2.7182817]], shape=(2, 3), dtype=float32)'''
sum = tf.reduce_sum(exp,axis=1)
'''输出
tf.Tensor([30.192875 11.107338], shape=(2,), dtype=float32)
'''
out = tf.nn.softmax(out, axis=1)
'''输出
tf.Tensor(
[[0.09003057 0.24472848 0.66524094]
 [0.6652409  0.09003057 0.24472846]], shape=(2, 3), dtype=float32)
tf.Tensor([2 0], shape=(2,), dtype=int64)'''

运算过程:

exp=\begin{pmatrix} e^1 & e^2 &e^3 \\ e^2 & e^0 & e^1 \end{pmatrix}

sum = \begin{pmatrix} e+e^2+e^3 \\ 1+e+e^2 \end{pmatrix}

softmax = \begin{pmatrix} 1/(1+e+e^2) &e/(1+e+e^2) &e^2/(1+e+e^2) \\ e^2/(1+e+e^2) & 1/(1+e+e^2) & e/(1+e+e^2) \end{pmatrix}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
import tensorflow as tf from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPool2D, Dropoutfrom tensorflow.keras import Model​# 在GPU上运算时,因为cuDNN库本身也有自己的随机数生成器,所以即使tf设置了seed,也不会每次得到相同的结果tf.random.set_seed(100)​mnist = tf.keras.datasets.mnist(X_train, y_train), (X_test, y_test) = mnist.load_data()X_train, X_test = X_train/255.0, X_test/255.0​# 将特征数据集从(N,32,32)转变成(N,32,32,1),因为Conv2D需要(NHWC)四阶张量结构X_train = X_train[..., tf.newaxis]    X_test = X_test[..., tf.newaxis]​batch_size = 64# 手动生成mini_batch数据集train_ds = tf.data.Dataset.from_tensor_slices((X_train, y_train)).shuffle(10000).batch(batch_size)test_ds = tf.data.Dataset.from_tensor_slices((X_test, y_test)).batch(batch_size)​class Deep_CNN_Model(Model):    def __init__(self):        super(Deep_CNN_Model, self).__init__()        self.conv1 = Conv2D(32, 5, activation='relu')        self.pool1 = MaxPool2D()        self.conv2 = Conv2D(64, 5, activation='relu')        self.pool2 = MaxPool2D()        self.flatten = Flatten()        self.d1 = Dense(128, activation='relu')        self.dropout = Dropout(0.2)        self.d2 = Dense(10, activation='softmax')        def call(self, X):    # 无需在此处增加training参数状态。只需要在调用Model.call时,传递training参数即可        X = self.conv1(X)        X = self.pool1(X)        X = self.conv2(X)        X = self.pool2(X)        X = self.flatten(X)        X = self.d1(X)        X = self.dropout(X)   # 无需在此处设置training状态。只需要在调用Model.call时,传递training参数即可        return self.d2(X)​model = Deep_CNN_Model()loss_object = tf.keras.losses.SparseCategoricalCrossentropy()optimizer = tf.keras.optimizers.Adam()​train_loss = tf.keras.metrics.Mean(name='train_loss')train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='train_accuracy')test_loss = tf.keras.metrics.Mean(name='test_loss')test_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='test_accuracy')​# TODO:定义单批次的训练和预测操作@tf.functiondef train_step(images, labels):       ......    @tf.functiondef test_step(images, labels):       ......    # TODO:执行完整的训练过程EPOCHS = 10for epoch in range(EPOCHS)补全代码
最新发布
06-13

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪易

给我来点鼓励吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值