eno_xyn

导航

tensorFlow的基本应用

安装Python版TensorFlow可以使用模块管理工具pip/pip3 [7]  或anaconda并在终端直接运行。
1
2
pip install tensorflow
conda install -c conda-forge tensorflow
此外Python版TensorFlow也可以使用Docker安装 [8]  :
1
2
3
4
5
6
7
docker pull tensorflow/tensorflow:latest
# 可用的tag包括latest、nightly、version等
docker run -it -p 8888:8888 tensorflow/tensorflow:latest
# dock下运行jupyter notebook
docker run -it tensorflow/tensorflow bash
# 启用编译了tensorflow的bash环境
张量(tf.Tensor)
张量是TensorFlow的核心数据单位,在本质上是一个任意维的数组。可用的张量类型包括常数、变量、张量占位符和稀疏张量 。张量的秩是它的维数,而它的形状是一个整数元组,指定了数组中每个维度的长度。张量按NumPy数组的方式进行切片和重构。张量有23种数据类型,包括4类浮点实数、2类浮点复数、13类整数、逻辑、字符串和两个特殊类型,数据类型之间可以互相转换 [16]  。TensorFlow中的张量是数据流图中的单位,可以不具有值,但在图构建完毕后可以获取其中任意张量的值,该过程被称为“评估。TensorFlow无法直接评估在函数内部或控制流结构内部定义的张量。如果张量取决于队列中的值,那么只有在某个项加入队列后才能评估。

固定值张量
tf.zeros(shape, dtype=tf.float32, name=None)
创建所有元素设置为零的张量。此操作返回一个dtype具有形状shape和所有元素设置为零的类型的张量。

tf.zeros_like(tensor, dtype=None, name=None)
给tensor定单张量(),此操作返回tensor与所有元素设置为零相同的类型和形状的张量。

tf.ones(shape, dtype=tf.float32, name=None)
创建一个所有元素设置为1的张量。此操作返回一个类型的张量,dtype形状shape和所有元素设置为1。

tf.ones_like(tensor, dtype=None, name=None)
给tensor定单张量(),此操作返回tensor与所有元素设置为1 相同的类型和形状的张量。

tf.fill(dims, value, name=None)
创建一个填充了标量值的张量。此操作创建一个张量的形状dims并填充它value。

tf.constant(value, dtype=None, shape=None, name='Const')
创建一个常数张量。

TensorFlow 在内部将张量表示为基本数据类型的 n维数组,在一个数组里边,我们总得知道我们的存进去的数据究竟是什么类型。

  • 我们可以将任意数据结构序列化为 string 并将其存储在 tf.Tensor 中。通过 tf.cast可以将 tf.Tensor 从一种数据类型转型为另一种。
  • 创建随机张量

    tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)

    tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)

变量(tf.Variable)
变量是可以通过操作改变取值的特殊张量 [17-18]  。变量必须先初始化后才可使用,低阶API中定义的变量必须明确初始化,高阶API例如Keras会自动对变量进行初始化。TensorFlow可以在tf.Session开始时一次性初始化所有变量,对自行初始化变量,在tf.Variable上运行的tf.get_variable可以在定义变量的同时指定初始化器
Keras是一个支持TensorFlow、Thenao和Microsoft-CNTK的第三方高阶神经网络API [33]  。Keras以TensorFlow的Python API为基础提供了神经网络、尤其是深度网络的构筑模块,并将神经网络开发、训练、测试的各项操作进行封装以提升可扩展性和简化使用难度 [33]  。在TensorFlow下可以直接导出Keras模块使用 [34]  
图:
在TensorFlow中,使用图 (graph) 来表示计算任务。其实TensorFlow默认会给我们一张空白的图,一般我们会叫这个为”数据流图“。数据流图由有向边和节点组成,在使用TensorFlow的时候我们会在图中创建各种的节点,而Tensor会在这些节点中流通。所以,就叫做TensorFlow
实验
import tensorflow as tf
from tensorflow import keras

# Helper libraries
import numpy as np
import matplotlib.pyplot as plt

print(tf.__version__)
fashion_mnist = keras.datasets.fashion_mnist

(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
fashion_mnist = keras.datasets.fashion_mnist

class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
len(train_labels)


len(test_labels)
plt.figure()
plt.imshow(train_images[0])
plt.colorbar()
plt.grid(False)
plt.show()
train_images = train_images / 255.0

test_images = test_images / 255.0
plt.figure(figsize=(10,10))
for i in range(25):
plt.subplot(5,5,i+1)
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(train_images[i], cmap=plt.cm.binary)
plt.xlabel(class_names[train_labels[i]])
plt.show()
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10)
])
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=10)
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)

print('\nTest accuracy:', test_acc)
probability_model = tf.keras.Sequential([model,
tf.keras.layers.Softmax()])
predictions = probability_model.predict(test_images)

np.argmax(predictions[0])

def plot_image(i, predictions_array, true_label, img):
predictions_array, true_label, img = predictions_array, true_label[i], img[i]
plt.grid(False)
plt.xticks([])
plt.yticks([])

plt.imshow(img, cmap=plt.cm.binary)

predicted_label = np.argmax(predictions_array)
if predicted_label == true_label:
color = 'blue'
else:
color = 'red'

plt.xlabel("{} {:2.0f}% ({})".format(class_names[predicted_label],
100*np.max(predictions_array),
class_names[true_label]),
color=color)

def plot_value_array(i, predictions_array, true_label):
predictions_array, true_label = predictions_array, true_label[i]
plt.grid(False)
plt.xticks(range(10))
plt.yticks([])
thisplot = plt.bar(range(10), predictions_array, color="#777777")
plt.ylim([0, 1])
predicted_label = np.argmax(predictions_array)

thisplot[predicted_label].set_color('red')
thisplot[true_label].set_color('blue')
i = 0
plt.figure(figsize=(6, 3))
plt.subplot(1, 2, 1)
plot_image(i, predictions[i], test_labels, test_images)
plt.subplot(1, 2, 2)
plot_value_array(i, predictions[i], test_labels)
plt.show()
i = 12
plt.figure(figsize=(6, 3))
plt.subplot(1, 2, 1)
plot_image(i, predictions[i], test_labels, test_images)
plt.subplot(1, 2, 2)
plot_value_array(i, predictions[i], test_labels)
plt.show()
# Plot the first X test images, their predicted labels, and the true labels.
# Color correct predictions in blue and incorrect predictions in red.
num_rows = 5
num_cols = 3
num_images = num_rows * num_cols
plt.figure(figsize=(2 * 2 * num_cols, 2 * num_rows))
for i in range(num_images):
plt.subplot(num_rows, 2 * num_cols, 2 * i + 1)
plot_image(i, predictions[i], test_labels, test_images)
plt.subplot(num_rows, 2 * num_cols, 2 * i + 2)
plot_value_array(i, predictions[i], test_labels)
plt.tight_layout()
plt.show()
# Grab an image from the test dataset.
img = test_images[1]

print(img.shape)
# Add the image to a batch where it's the only member.
img = (np.expand_dims(img, 0))

print(img.shape)
predictions_single = probability_model.predict(img)

print(predictions_single)
plot_value_array(1, predictions_single[0], test_labels)
_ = plt.xticks(range(10), class_names, rotation=45)
np.argmax(predictions_single[0])

 第一章1)√ 2)√ 3)√

第二章1判断题1)√ 2)√ 3)×

2填空题1)数字,字符串,列表

2)字符串,整型,列表,元组 

3)字符串

第三章判断题1)√ 2)√ 3)√  4)×

 第四章

填空题1)自适性,非线性,动力学

2)前馈网络,反馈网络 离散型 连续型

3)拓扑性,学习性,稳定收敛性

简答题

(1)特点:

        (1)可以充分逼近任意复杂的非线性关系;

  (2)所有定量或定性的信息都等势分布贮存于网络内的各神经元,故有很强的鲁棒性和容错性;

  (3)采用并行分布处理方法,使得快速进行大量运算成为可能;

  (4)可学习和自适应不知道或不确定的系统;

  (5)能够同时处理定量、定性知识。

(2)
1)函数逼近:用输入向量和相应的输出向量训练一个网络逼近一个函数。
2)模式识别:用一个待定的输出向量将它与输入向量联系起来。
3)分类:把输入向量所定义的合适方式进行分类。
4)数据压缩:减少输出向量维数以便于传输或存储
论诉题
1)前馈型神经网络取连续或离散变量,一般不考虑输出与输入在时间上的滞后效应,只表达输出与输入的映射关系; 反馈型神经网络可以用离散变量也可以用连续取值,考虑输出与输入之间在时间上的延迟,需要用动态方程来描述系统的模 型。 前馈型神经网络的学习主要采用误差修正法(如BP算法),计算过程一般比较慢,收敛速度也比较慢; 而反馈型神经网络主要采用Hebb学习规则,一般情况下计算的收敛速度很快。 反馈网络也有类似于前馈网络的应用,并且在联想记忆和优化计算方面的应用更显特点。
2)
1.
BP算法学习过程收敛速度慢; 
2.
BP算法所得到的网络性能差; 
3.
因为误差平方和函数可能有局部极小点出现,故BP算法不完备。 
4.
BP网络学习率不稳定
3)
网络的各个输入数据常常具有不同的物理意义和不同的量纲,如某输入分量在0-1*10*范围内变化,而另一输入分量则在0-1*10*范围内变化。尺度变换使所有分量都在1 ~0或1 1-之间变化,从而使网络训练一开始就给各输入分量以同等重要的地位;BP网的神经元均采用Sigmoid转移函数,变换后可防止因净输入的绝对值过大而使神经元输出饱和,继而使权值调整进入误差曲面的平坦区; Sigmoid 转移函数的输出在1 ~0或1~1-之间,作为教师信号的期望输出数据如不进行变换处理,劳么使教值大的分量处对误差大, 数值小的分量的绝对误差小,网络训练时只针对输出的总误差调整权值,其结果是在茶族差中占你额小的输出分量相对误差较大,对输出分量进行尺度变换后这个问题可迎刃而解。
第五章简答题
1)TensorFlow keras
2)

tf.constant_initializer()

也可以简写为tf.Constant()

初始化为常数,这个非常有用,通常偏置项就是用它初始化的。

由它衍生出的两个初始化方法:

a、 tf.zeros_initializer(), 也可以简写为tf.Zeros()

b、tf.ones_initializer(), 也可以简写为tf.Ones()

4)

from future import print_function
import torch
import numpy

1.创建一个没有初始化的5*3矩阵:
x = torch.zeros(5, 3, dtype=torch.long)
print(x)


2.创建一个随机初始化矩阵
x = torch.rand(5, 3)
print(x)

3.构造一个填满0且数据类型为long的矩阵:
x = torch.zeros(5, 3, dtype=torch.long)
print(x)
4.用指定的数据构造张量
x = torch.tensor([[1,2,3],[1,2,3],[1,2,3]])
print(x)

5.根据已有的tensor建立新的tensor
y = torch.randn_like(x, dtype=torch.float) # 重载 dtype!
print(y)

以上两个tensor的size一致

6.更换tensor的大小
x = torch.ones(4, 3, dtype=torch.float)
print(x)
x = x.new_zeros(5, 3)
print(x)
#new_ones将新的tensor全填满1
#new_zeros将新的tensor全填满0
#将[4,3]的tensor更换为[5,3]

5)

1.
Caffe
2.
TensorFlow
3.
PyTorch
第六章

课后习题:

1

       卷积中的局部连接:层间神经只有局部范围内的连接,在这个范围内采用全连接的方式,超过这个范围的神经元则没有连接;连接与连接之间独立参数,相比于去全连接减少了感受域外的连接,有效减少参数规模。

        全连接:层间神经元完全连接,每个输出神经元可以获取到所有神经元的信息,有利于信息汇总,常置于网络末尾;连接与连接之间独立参数,大量的连接大大增加模型的参数规模。

2

        利用快速傅里叶变换把图片和卷积核变换到频域,频域把两者相乘,把结果利用傅里叶逆变换得到特征图。

3

        池化操作的作用:对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征。

        激活函数的作用:用来加入非线性因素的,解决线性模型所不能解决的问题。

4

        消除数据之间的量纲差异,便于数据利用与快速计算。

5

        寻找损失函数的最低点,就像我们在山谷里行走,希望找到山谷里最低的地方。那么如何寻找损失函数的最低点呢?在这里,我们使用了微积分里导数,通过求出函数导数的值,从而找到函数下降的方向或者是最低点(极值点)。损失函数里一般有两种参数,一种是控制输入信号量的权重(Weight, 简称 [公式] ),另一种是调整函数与真实值距离的偏差(Bias,简称 [公式] )。我们所要做的工作,就是通过梯度下降方法,不断地调整权重 [公式] 和偏差b,使得损失函数的值变得越来越小。而随机梯度下降算法只随机抽取一个样本进行梯度计算。

第七章

1)目标检测是计算机视觉领域内一个长期存在的基础性难题,几十年来也一直都是一个活跃的研究领域。目标检测的目标是确定某张给定图像中是否存在给定类别(比如人、车、自行车、狗和猫)的目标实例;如果存在,就返回每个目标实例的空间位置和覆盖范围(比如返回一个边界框 [53, 179])。作为图像理解和计算机视觉的基石,目标检测是解决分割、场景理解、目标追踪。、图像描述、事件检测和活动识别等更复杂更高层次的视觉任务的基础。目标检测在人工智能和信息技术的许多领域都有广泛的应用,包括机器人视觉、消费电子产品、安保、自动驾驶、人机交互、基于内容的图像检索、智能视频监控和增强现实。

1. 开放世界学习

2. 更好更高效的检测框架

3. 紧凑高效的深度 CNN 特征

4. 稳健的目标表征

5. 形境推理

6. 目标实例分割

7. 弱监督或无监督学习

8. 三维目标检测

 

2)ResNet的主要思想是在网络中增加了直连通道,即Highway Network的思想。此前的网络结构是性能输入做一个非线性变换,而Highway Network则允许保留之前网络层的一定比例的输出。ResNet的思想和Highway Network的思想也非常类似,允许原始输入信息直接传到后面的层中。DenseNet的一个优点是网络更窄,参数更少,很大一部分原因得益于这种dense block的设计,后面有提到在dense block中每个卷积层的输出feature map的数量都很小(小于100),而不是像其他网络一样动不动就几百上千的宽度。同时这种连接方式使得特征和梯度的传递更加有效,网络也就更加容易训练。

3)DenseNet的一个优点是网络更窄,参数更少,很大一部分原因得益于这种dense block的设计,后面有提到在dense block中每个卷积层的输出feature map的数量都很小(小于100),而不是像其他网络一样动不动就几百上千的宽度。同时这种连接方式使得特征和梯度的传递更加有效,网络也就更加容易训练。”

posted on 2022-04-24 21:25  eno_xyn  阅读(312)  评论(0编辑  收藏  举报