tf函数总结(一)

1、tf.concat

concat(
    values,
    axis,
    name='concat'
)
将一组张量沿某一维度连接起来。

当axis=i时,如果values[i].shape=[d1,d2, ....,daxis[i], ..., dn],则连接后的张量维度为[d1,d2,..., Raxis,...,dn],其中Raxis=sum(daxis[i]),这就是输入的张量数据沿着某一维度连接。

t1 = [[1, 2, 3], [4, 5, 6]]
t2 = [[7, 8, 9], [10, 11, 12]]
tf.concat([t1, t2], 0) ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
tf.concat([t1, t2], 1) ==> [[1, 2, 3, 7, 8, 9], [4, 5, 6, 10, 11, 12]]

# tensor t3 with shape [2, 3]
# tensor t4 with shape [2, 3]
tf.shape(tf.concat([t3, t4], 0)) ==> [4, 3]
tf.shape(tf.concat([t3, t4], 1)) ==> [2, 6]

2、tf.split

split(
    value,
    num_or_size_splits,
    axis=0,
    num=None,
    name='split'
)
将一个张量分开成多个子张量

如果num_or_size_splits是一个整数为num_splits,则会将value沿着axis维度分为num_splits个子张量,如果不为整数可以是一个一维张量,将axis维度分为len(num_splits)个子张量,每个子张量在axis的维度上等于num_splits[i]

# 'value' is a tensor with shape [5, 30]
# Split 'value' into 3 tensors with sizes [4, 15, 11] along dimension 1
split0, split1, split2 = tf.split(value, [4, 15, 11], 1)
tf.shape(split0) ==> [5, 4]
tf.shape(split1) ==> [5, 15]
tf.shape(split2) ==> [5, 11]
# Split 'value' into 3 tensors along dimension 1
split0, split1, split2 = tf.split(value, num_or_size_splits=3, axis=1)
tf.shape(split0) ==> [5, 10] 
3、tf.expand_dims
expand_dims(
    input,
    axis=None,
    name=None,
    dim=None
)
为一个张量添加一个维度

axis为增加维度的位置,0表示第一个位置,如果是负数,则从后面计算,如-1表示从最后位置增加一个维度。

# 't' is a tensor of shape [2]
shape(expand_dims(t, 0)) ==> [1, 2]
shape(expand_dims(t, 1)) ==> [2, 1]
shape(expand_dims(t, -1)) ==> [2, 1]

# 't2' is a tensor of shape [2, 3, 5]
shape(expand_dims(t2, 0)) ==> [1, 2, 3, 5]
shape(expand_dims(t2, 2)) ==> [2, 3, 1, 5]
shape(expand_dims(t2, 3)) ==> [2, 3, 5, 1]
4、tf.constant
constant(
    value,
    dtype=None,
    shape=None,
    name='Const',
    verify_shape=False
)
创建一个常亮的张量

其中value给出常亮的值,dtype和shape都是可选的,如果不指定则以value的准。

tensor = tf.constant([1, 2, 3, 4, 5, 6, 7]) => [1 2 3 4 5 6 7]

tensor = tf.constant(-1.0, shape=[2, 3]) => [[-1. -1. -1.] [-1. -1. -1.]]


5、tf.placeholder_with_default

placeholder_with_default(
    input,
    shape,
    name=None
)
创建一个placeholder操作,如果在输出时没有给feed,则以input为值

tf.placeholder_with_default(tf.constant(1.0),shape=[],  name='use_dropout')


6、tf.global_variables

返回去全局变量。全局变量指的是在分布式环境中可以跨机器进行共享的变量。通过Variable()构造函数或get_variable()创建的新变量会自动添加到图的集合GraphKeys.GLOBAL_VARIABLES中,这个函数可以方便的返回这个集合的内容。




  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
卷积神经网络(Convolutional Neural Network, CNN)是深度学习中非常重要的一种神经网络类型,主要应用于图像识别、语音识别等领域。在本次实验中,我们使用 TensorFlow 搭建了一个简单的 CNN 模型,用于对 MNIST 数据集中的手写数字进行识别。 实验流程如下: 1. 数据预处理 首先,我们通过 TensorFlow 的 `input_data` 模块从网上下载了 MNIST 数据集,并进行了简单的预处理,将像素值从 0-255 转换为 0-1 的浮点数。我们还对标签进行了 one-hot 编码,以便在训练时使用交叉熵损失函数。 ```python mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) ``` 2. 搭建 CNN 模型 我们的 CNN 模型包含两个卷积层和两个全连接层,其中每个卷积层之后都跟着一个 max pooling 层,用于进行下采样和特征提取。我们还使用了 ReLU 激活函数来增加模型的非线性性。 ```python # 定义输入数据的占位符 x = tf.placeholder(tf.float32, shape=[None, 28, 28, 1]) y_true = tf.placeholder(tf.float32, shape=[None, 10]) # 定义第一个卷积层,使用32个5x5的卷积核 conv_1 = tf.layers.conv2d(inputs=x, filters=32, kernel_size=(5, 5), activation=tf.nn.relu) # 定义第一个池化层,使用2x2的池化窗口 pool_1 = tf.layers.max_pooling2d(inputs=conv_1, pool_size=(2, 2), strides=2) # 定义第二个卷积层,使用64个5x5的卷积核 conv_2 = tf.layers.conv2d(inputs=pool_1, filters=64, kernel_size=(5, 5), activation=tf.nn.relu) # 定义第二个池化层,使用2x2的池化窗口 pool_2 = tf.layers.max_pooling2d(inputs=conv_2, pool_size=(2, 2), strides=2) # 将池化层输出展平 flatten = tf.layers.flatten(pool_2) # 定义全连接层 fc = tf.layers.dense(inputs=flatten, units=1024, activation=tf.nn.relu) # 定义输出层 logits = tf.layers.dense(inputs=fc, units=10) ``` 3. 定义损失函数和优化器 我们使用交叉熵损失函数来衡量模型的预测结果与真实标签之间的差距,并使用 Adam 优化器来最小化损失函数。 ```python # 定义损失函数 cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_true, logits=logits)) # 定义优化器 optimizer = tf.train.AdamOptimizer(learning_rate=0.001) train = optimizer.minimize(cross_entropy) ``` 4. 训练模型 我们使用 mini-batch 的方式进行训练,每次随机从训练集中抽取一定数量的样本进行训练,并计算损失函数和准确率。在训练过程中,我们使用 TensorFlow 的 `Session` 对象来运行计算图,并通过 feed_dict 参数将训练数据传递给模型。 ```python # 定义准确率计算方法 correct_prediction = tf.equal(tf.argmax(logits, 1), tf.argmax(y_true, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) # 初始化变量 init = tf.global_variables_initializer() # 训练模型 with tf.Session() as sess: sess.run(init) for i in range(1000): batch_x, batch_y = mnist.train.next_batch(100) sess.run(train, feed_dict={x: batch_x, y_true: batch_y}) if i % 100 == 0: acc = sess.run(accuracy, feed_dict={x: mnist.test.images, y_true: mnist.test.labels}) print("Step " + str(i) + ", Testing Accuracy= " + str(acc)) ``` 5. 实验结果 在经过约 1000 次迭代后,我们的模型在测试集上的准确率达到了 0.987。这说明我们的 CNN 模型能够有效地对手写数字进行识别。 总结: 本次实验中,我们通过 TensorFlow 搭建了一个简单的 CNN 模型,并使用 MNIST 数据集对其进行了训练和测试。通过实验,我们深入了解了卷积神经网络的原理和实现方式,并掌握了使用 TensorFlow 搭建 CNN 模型的方法。同时,我们还学习了如何进行数据预处理、定义损失函数和优化器、训练和测试模型等基本技能,这些对于进一步学习深度学习和神经网络非常有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值