|
56 | 56 | "source": [
|
57 | 57 | "def conv2d(X, W, pad=1, stride=1):\n",
|
58 | 58 | " # filter\\kernel size\n",
|
59 |
| - " f, f, n_C = W.shape\n", |
| 59 | + " f, f, _ = W.shape\n", |
| 60 | + " n_C = 1\n", |
60 | 61 | " \n",
|
61 | 62 | " # new output volume\n",
|
62 | 63 | " n_H = int(np.floor(X.shape[0] - f + 2 * pad) / (stride * 1.)) + 1\n",
|
|
83 | 84 | "metadata": {},
|
84 | 85 | "source": [
|
85 | 86 | "# Max Pooling\n",
|
86 |
| - "Size reduction via max pooling!" |
| 87 | + "Implements max pooling with the given pool size and stride." |
87 | 88 | ]
|
88 | 89 | },
|
89 | 90 | {
|
|
94 | 95 | "source": [
|
95 | 96 | "def max_pooling2d(X, pool_size=2, stride=2):\n",
|
96 | 97 | " # new output volume\n",
|
97 |
| - " n_H = int(np.floor(X.shape[0] - pool_size + 2) / (stride * 1.)) #+ 1\n", |
98 |
| - " n_W = int(np.floor(X.shape[1] - pool_size + 2) / (stride * 1.)) #+ 1\n", |
| 98 | + " n_H = int(np.floor(X.shape[0] - pool_size) / (stride * 1.)) + 1\n", |
| 99 | + " n_W = int(np.floor(X.shape[1] - pool_size) / (stride * 1.)) + 1\n", |
99 | 100 | " n_C = X.shape[2]\n",
|
100 | 101 | " \n",
|
101 | 102 | " Z = np.zeros((n_H, n_W, n_C))\n",
|
|
125 | 126 | "metadata": {},
|
126 | 127 | "outputs": [],
|
127 | 128 | "source": [
|
128 |
| - "w = np.zeros((3, 3, 1))\n", |
| 129 | + "w = np.zeros((3, 3, 3))\n", |
129 | 130 | "t = np.array([[1, 1, 1], [0, 0, 0], [-1, -1, -1]]) / 3\n",
|
130 | 131 | "#t = np.array([[0, 0, 0], [0, 1., 0], [0, 0, 0]]) / 3\n",
|
131 | 132 | "w[:,:,0] = t\n",
|
132 |
| - "#w[:,:,1] = t\n", |
133 |
| - "#w[:,:,2] = t" |
| 133 | + "w[:,:,1] = t\n", |
| 134 | + "w[:,:,2] = t" |
134 | 135 | ]
|
135 | 136 | },
|
136 | 137 | {
|
|
147 | 148 | "metadata": {},
|
148 | 149 | "outputs": [],
|
149 | 150 | "source": [
|
150 |
| - "image = np.array(open_and_resize(\"fence.jpg\", resize=(400,400)))\n", |
| 151 | + "image = np.array(open_and_resize(\"wedding.jpg\", resize=(400,400)))\n", |
151 | 152 | "plt.imshow(image)"
|
152 | 153 | ]
|
153 | 154 | },
|
|
0 commit comments