tf.argmax, tf.equal, tf.cast和 tf.truncated_normal

本文详细介绍了TensorFlow中常用的四个函数:tf.argmax用于寻找最大值索引;tf.equal用于比较两个张量是否相等;tf.cast用于转换数据类型;tf.truncated_normal用于生成截断正态分布的随机数。
摘要由CSDN通过智能技术生成

1. tf.argmax()函数

tf.argmax可以认为就是np.argmax。tensorflow使用numpy实现的这个API。 
   简单的说,tf.argmax就是返回最大的那个数值所在的下标。tf.argmax(array,axis)

    当axis=1时返回每列最大值的下标,当axis=0时返回每行最大值的下班。

2. tf.equal()函数

tf.equal(A,B)是对比这两个矩阵或者向量的相等的元素,如果是相等的那就返回True,反正返回False,返回的值的矩阵维度和A是一样的

A = [[1,3,4,5,6]]  
B = [[1,3,4,3,2]]


with tf.Session() as sess:  
    print(sess.run(tf.equal(A, B)))
    
[[ True  True  True False False]]

3. tf.cast()函数

tf.cast(x, dtype)将x的数据格式转化成dtype.

a = tf.Variable([1,0,0,1,1])
b = tf.cast(a,dtype=tf.bool)
sess = tf.Session()


a = tf.Variable([1,0,0,1,1])
b = tf.cast(a,dtype=tf.bool)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
print(sess.run(b))

[ True False False  True  True]

4. tf.truncated_normal()

tf.truncated_normal(shape, mean, stddev):shape表示生成张量的维度,mean是均值,stddev是标准差。这个函数产生正太分布,均值和标准差自己设定。这是一个截断的产生正太分布的函数,就是说产生正太分布的值如果与均值的差值大于两倍的标准差,那就重新生成。和一般的正太分布的产生随机数据比起来,这个函数产生的随机数与均值的差距不会超过两倍的标准差,但是一般的别的函数是可能的。

import tensorflow as tf;  
import numpy as np;  
import matplotlib.pyplot as plt;  

c = tf.truncated_normal(shape=[10,10], mean=0, stddev=1)  

with tf.Session() as sess:  
    print(sess.run(c))
    
[[ 0.56077307  1.74287605 -0.15655719  0.87136668 -0.4219175   0.94079614
  -1.31186545  1.94287431  0.70748854  1.15509737]
 [ 0.32469562 -0.91890186 -0.44398952  1.25986481 -1.07295966  0.21889997
   0.19389877 -1.22909117  1.34865403  0.87812191]
 [-0.83542323 -0.05598836 -1.05256093 -1.16475403 -0.17121609 -0.55075479
  -0.37847248  0.14151201  0.36596569  0.55171227]
 [ 0.45216689  0.12429248 -0.4333829  -0.00368057 -0.20933141  0.5465408
   1.06096387  1.47238612 -1.99268937  1.28203201]
 [ 0.36932501  0.30012983  1.94679129  0.59601396 -0.16721351 -0.42786792
   0.917597   -1.6504811  -0.81060582 -0.35126168]
 [-1.48954999 -0.42889833  0.31517059  1.00009787  0.26073182  1.26285052
  -1.80997884  0.51399821 -0.27673215  0.15389352]
 [ 0.8669793  -0.28650126  1.39484227 -0.4041909  -1.70028269  0.58513969
   0.75772232 -0.47386578 -0.34529254 -0.71658897]
 [ 0.74709773 -0.0835886   1.14453304  0.70367438  0.07037418 -0.15808868
   0.23158503 -0.67268801  0.55869597  0.12777361]
 [-0.52604282  0.64181858 -0.04147881  0.78596973  0.69087744  0.56500375
  -1.12409449 -0.42864376  0.30804652  1.33116138]
 [-1.36940789 -0.4526186  -0.87445366  0.19748467 -0.06541829 -0.2672275
   0.63084471  0.76155263  0.83874393  0.91775542]]



好的,下面是一个简单的卷积神经网络的代码,用于手写数字识别的分类操作: ``` python import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # 加载MNIST数据集 mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) # 定义输入和输出的placeholder x = tf.placeholder(tf.float32, [None, 784]) y_true = tf.placeholder(tf.float32, [None, 10]) # 定义卷积层1 W_conv1 = tf.Variable(tf.truncated_normal([5, 5, 1, 32], stddev=0.1)) b_conv1 = tf.Variable(tf.constant(0.1, shape=[32])) x_image = tf.reshape(x, [-1, 28, 28, 1]) h_conv1 = tf.nn.relu(tf.nn.conv2d(x_image, W_conv1, strides=[1, 1, 1, 1], padding='SAME') + b_conv1) h_pool1 = tf.nn.max_pool(h_conv1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') # 定义卷积层2 W_conv2 = tf.Variable(tf.truncated_normal([5, 5, 32, 64], stddev=0.1)) b_conv2 = tf.Variable(tf.constant(0.1, shape=[64])) h_conv2 = tf.nn.relu(tf.nn.conv2d(h_pool1, W_conv2, strides=[1, 1, 1, 1], padding='SAME') + b_conv2) h_pool2 = tf.nn.max_pool(h_conv2, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') # 定义全连接层1 W_fc1 = tf.Variable(tf.truncated_normal([7 * 7 * 64, 1024], stddev=0.1)) b_fc1 = tf.Variable(tf.constant(0.1, shape=[1024])) h_pool2_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 64]) h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1) keep_prob = tf.placeholder(tf.float32) h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob) # 定义全连接层2和预测输出 W_fc2 = tf.Variable(tf.truncated_normal([1024, 10], stddev=0.1)) b_fc2 = tf.Variable(tf.constant(0.1, shape=[10])) y_pred = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2) # 定义损失函数和优化器 cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_true * tf.log(y_pred), reduction_indices=[1])) train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy) # 定义评估模型的准确率 correct_prediction = tf.equal(tf.argmax(y_pred, 1), tf.argmax(y_true, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) # 训练模型 with tf.Session() as sess: sess.run(tf.global_variables_initializer()) for i in range(20000): batch = mnist.train.next_batch(50) if i % 100 == 0: train_accuracy = accuracy.eval(feed_dict={x: batch[0], y_true: batch[1], keep_prob: 1.0}) print("step %d, training accuracy %g" % (i, train_accuracy)) train_step.run(feed_dict={x: batch[0], y_true: batch[1], keep_prob: 0.5}) print("test accuracy %g" % accuracy.eval(feed_dict={x: mnist.test.images, y_true: mnist.test.labels, keep_prob: 1.0})) ``` 这个卷积神经网络有两个卷积层和一个全连接层。第一个卷积层有32个卷积核,第二个卷积层有64个卷积核。每个卷积层后面都有一个最大池化层。在全连接层1中使用了dropout技术以防止过拟合。损失函数使用交叉熵,优化器使用Adam优化器。在训练过程中,每100步会输出一次训练准确率。最后输出测试准确率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值