感觉吴恩达的作业是业界良心,要好好看看,不要直接做完作业就完事,还是要认真的去读代码逻辑,看看人家的代码怎么写的,然后,自己挫挫的代码能力才能提高,喵。
第一周的编程题目分为两个部分,一个是自己去实现卷积,pooling的操作,一个是用tensorflow来实现。
Convolution model - Application - v1
1.1create placehoder:
tf.placeholder
placeholder(dtype,shape=None,name=None)
eg x = tf.placeholder(tf.float32, shape=(1024, 1024))
https://www.tensorflow.org/api_docs/python/tf/placeholder
1.2 Initialize parameters
sess.run([optimizer, cost], feed_dict={X: minibatch_X, Y: minibatch_Y})
sess.run 的参数有 详见https://www.tensorflow.org/versions/r1.2/api_docs/python/tf/train/SessionRunArgs
参考https://github.com/shaoanlu/deeplearning.ai-Convolutional-Neural-Networks
第二周
在keras中,padding的方式有两种,一种是valid一种是same ,valid的意思是不padding,same的话就是补零操作(添加补零操作,使得最后得到的feature map 等于之前的大小除以stride)
可以看第一周的笔记,里面有讲到
keras 里面两层相加 added = keras.layers.Add()([x1, x2]) # equivalent to added = keras.layers.add([x1, x2])
第三周
np.dot 就是矩阵的乘法 np.multiply 就是对应元素相乘,也可以用*实现
tf.boolean_mask(box_class_scores, filtering_mask) Apply the mask to box_class_scores
xi1 = np.max(box1[0], box2[0]) 这样写是错的AttributeError: 'int' object has no attribute 'max' 这是因为求max是要对一个数组,而不是两个数,所以加一个[],就可以了,改为xi1 = np.max([box1[0], box2[0]])
tf.image.non_max_suppression tf 对nms的实现, return A 1-D integer Tensor of shape [M] representing the selected indices from the boxes tensor, where M <= max_output_size. 参考 https://tensorflow.google.cn/api_docs/python/tf/image/non_max_suppression
例子: selected_indices = tf.image.non_max_suppression( boxes, scores, max_output_size, iou_threshold) selected_boxes = tf.gather(boxes, selected_indices) gather函数The bounding box coordinates corresponding to the selected indices can then be obtained using the tf.gather operation.
在iou这个部分作业里面一直是0分,开始觉得可能是自己输出的位数不对,加了float,还是不对,查看论坛后发现在算交集要用np.maximum 才可以,用np.max 不行,嗯,就是那种本地对的,一提交就错,不知为何。
第四周:
实现triplet loss
tf.subtract(x,y,name=None) 实现两个数相减 x-y 对应位置元素的减法运算
tf.reduce_sum() Reduces input_tensor along the dimensions given in axis 不指定的话,相当于全压缩,最后得到维度为1,压缩列的话 -1 ,1好像都一样,压缩行的话0
np.linalg.norm 求范数 axis = 1 按照行来算 axis = 0 按照列算https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.norm.html
x.get_shape() 和 x = tf.shape(x)的区别
x.get_shape()返回 static shape,只有tensor有这个方法,返回的是元组。get_shape()不需要放在Session中即可运行,tf.shape()需要在session中运行。
x.get_shape().as_list() 是一个常用的方法,经常被用于将输出转为标准的python list
tf.multiply与tf.matmul的区别 tf.multiply()两个矩阵中对应元素各自相乘 tf.matmul()将矩阵a乘以矩阵b,生成a * b。
晚上写的有点粗糙,天亮再看一遍代码吧,好好写论文。今天要完成第三章还有第二章的某些部分。