在tf和np里面数据又不同的存储类型,不同的类型显示和存储的方式不一样,需要先判断其类型
矩阵相乘的问题,发现tf的使用和np的使用有点区别,在不规则写法(不规则写法是一维向量的一种写法,按行向量处理)中矩阵相乘问题,np可以执行,但是tf不行。
多行多列矩阵相乘和点乘问题
①tf和np的用法完全一致。
②相乘,必须是行列对应,第一个矩阵的列和第二个矩阵的行必须相等
③点乘,两个矩阵必须完全一致

快速理解tf.Session()
因为 product 不是直接计算的步骤, 所以我们会要使用 Session 来激活 product 并得到计算结果. 有两种形式使用会话控制 Session 。
matrix1 = tf.constant([[3,3]])
matrix2 = tf.constant([[2],
[2]])
product = tf.matmul(matrix1,matrix2)
sess = tf.Session()
result = sess.run(product)
print(result)
sess.close()

对于np
np.dot(A,B)) #相乘
np.multiply(A,B)) #点乘
对于tf
C=tf.matmul(A,B)
sess=tf.Session()
print(sess.run(C)) #相乘
CC=tf.multiply(AA,BB)
print(sess.run(CC)) #点乘
总结:
import numpy as np
import tensorflow as tf
a=np.array([1,2]) #不规则写法
b=np.array([[1],[2],[3]])
print(np.multiply(a,b)) #可以点乘
a=np.array([1,2,3])
b=np.array([[1,2],[2,2],[3,2]])
print(np.dot(a,b)) #可以相乘
########################################################
a=tf.constant([1,2])
b=tf.constant([[1],[2],[3]])
c=tf.multiply(a,b) #只能点乘
sess=tf.Session()
print(sess.run(c))
#a=tf.constant([1,2,3]) #tf在不规则情况下不能使用相乘
a=tf.constant([[1,2,3]])
b=tf.constant([[1],[2],[3]])
c=tf.matmul(a,b)
print(sess.run(c))
sess.close()

import numpy as np
import tensorflow as tf
#13 32 只能相乘,但是不能点乘,一维向量不能扩展至和多维向量一致,多维向量不能扩展
a=np.array([[1,2,3]])
b=np.array([[1,2],[2,3],[3,4]])
print(np.dot(a,b))
#12 32 只能点乘,不能相乘
a=np.array([[1,2]])
b=np.array([[1,2],[2,3],[3,4]])
print(np.multiply(a,b))
#都是一维 相乘只要满足行列对应相等即可,点乘,两个都是一维向量,都能扩展
a=np.array([[1,2,3]])
b=np.array([[1],[2],[3]])
print(np.dot(a,b))
print(np.multiply(a,b))
#######################################################################
a=tf.constant([[1,2,3]])
b=tf.constant([[1,2],[2,3],[3,4]])
c=tf.matmul(a,b)
sess=tf.Session()
print(sess.run(c))
a=tf.constant([[1,2]])
b=tf.constant([[1,2],[2,3],[3,4]])
c=tf.multiply(a,b)
print(sess.run(c))
a=tf.constant([[1,2,3]])
b=tf.constant([[1],[2],[3]])
c=tf.matmul(a,b)
cc=tf.multiply(a,b)
sess=tf.Session()
print(sess.run(c))
print(sess.run(cc))
sess.close()
①规则写法下,np和tf用法一致,相乘不用说,满足行列对应相等即可相乘,点乘中一维向量可以扩展,若能扩展至行列相等,则能点乘,否则不能点乘。
②不规则写法下,np和tf的点乘用法一致,tf不能相乘,np可以。
③综述:np和tf在点乘上用法一致,在不规则情况下tf不能使用,np适用任何情况

数组和矩阵的区别
从外观形状和数据结构上看,二维数组和数学中的矩阵没有区别。但是矩阵作为一种变换或映射算子的体现,矩阵运算有着明确而严格的数学规则。而数组元算是Matlab软件所定义的规则,其目的是为了数据管理方便、操作简单、指令形式自然和执行计算的有效。虽然数组运算尚缺乏严谨的数学推理,虽然数组运算仍在完善和成熟中,但是它的作用和影响正随着matlab的发展而扩大。
数组运算一般是点乘,矩阵是直接乘。二维数组和矩阵是等价的,
对于array来说,ab表示逐个元素相乘
*
运算符表示的含义也不同,对于maxtrix来说,a2表示a*a
对于array来说,a
2表示数组里的数的平方

numpy中array和asarry的区别
numpy.asarray(a,dtype=None,order=None)
功能描述:将输入数据(列表的列表,元组的元组,元组的列表等)转换为矩阵形式,将列表转化为数组,asarray对已经是数组的数据不做任何处理也不会被拷贝
array和asarray都可以将结构数据转化为ndarray,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,属于深拷贝。但asarray不会
array对其进行赋值时可以转换,asarry一般是浅层拷贝的功能强大一些。

全卷积网络的物体检测,输入图像为什么一般要resize到相同大小
VGG以及之前的网络结构在最后都是几个fully connected layers,这种结构需要前面的输入大小完全一样,所以要把图像resize
然后就是一般训练都是用batch而不是一张图,同一个batch里面是同样的size这样比较方便计算。
实际上,在一个batchsize中,输入inputs的尺寸是固定的(因为是使用固定的维度),所以在一个batchsize中通常需要resize到同样的大小;

对数字图像的处理要将其变为灰度图
由于彩色图像包含信息量大,处理速度较慢。要是每秒的帧数多,又是彩色的,会造成程序运行特别慢,甚至程序就死了。彩色图像最常见的是RGB三个通道或者RGB加上透明度四个通道,灰度图就一个通道,信息量减少了好几倍啊,但是对于一般的数字图像处理,像边缘提取等,如果就像要彩色图像的,那就不能变成灰度图了。

TensorFlow读取bin文件转换成图像时需要使用reshape及transpose
图片说明

全零矩阵:
空矩阵a是没有任何元素的一个空空如也的矩阵,元素个数是0。定义它的作用是先声明一下我接下来要用一个名字为a的矩阵啦,而在定义的时候,这个矩阵规模会多大,不太确定。
一般在输入图片形状的时候是用。

图像的归一化处理:留个疑问留个疑问
对于灰度图同统一除以255,恢复的时候全部乘上255,对于一般的怎么解决。图片说明
在opencv中有特定的解决指令,对于py呢。

H2 = np.exp(1j * z * kzmc.real) * np.exp(-np.abs(z) * np.abs(kzmc.imag)) * ((k0 * k0 - kxm ** 2 - kym ** 2) >= 0)#超牛逼的一句代码