(self, K, conv_layer_sizes, hidden_layer_sizes)
| 222 | |
| 223 | class DQN: |
| 224 | def __init__(self, K, conv_layer_sizes, hidden_layer_sizes): |
| 225 | self.K = K |
| 226 | |
| 227 | # inputs and targets |
| 228 | X = T.ftensor4('X') |
| 229 | G = T.fvector('G') |
| 230 | actions = T.ivector('actions') |
| 231 | |
| 232 | # create the graph |
| 233 | self.conv_layers = [] |
| 234 | num_input_filters = 4 # number of filters / color channels |
| 235 | current_size = IM_SIZE |
| 236 | for num_output_filters, filtersz, stride in conv_layer_sizes: |
| 237 | ### not using this currently, it didn't make a difference ### |
| 238 | # cut = None |
| 239 | # if filtersz % 2 == 0: # if even |
| 240 | # cut = (current_size + stride - 1) // stride |
| 241 | layer = ConvLayer(num_input_filters, num_output_filters, filtersz, stride) |
| 242 | current_size = (current_size + stride - 1) // stride |
| 243 | # print("current_size:", current_size) |
| 244 | self.conv_layers.append(layer) |
| 245 | num_input_filters = num_output_filters |
| 246 | |
| 247 | # get conv output size |
| 248 | Z = X / 255.0 |
| 249 | for layer in self.conv_layers: |
| 250 | Z = layer.forward(Z) |
| 251 | conv_out = Z.flatten(ndim=2) |
| 252 | conv_out_op = theano.function(inputs=[X], outputs=conv_out, allow_input_downcast=True) |
| 253 | test = conv_out_op(np.random.randn(1, 4, IM_SIZE, IM_SIZE)) |
| 254 | flattened_ouput_size = test.shape[1] |
| 255 | |
| 256 | |
| 257 | # build fully connected layers |
| 258 | self.layers = [] |
| 259 | M1 = flattened_ouput_size |
| 260 | print("flattened_ouput_size:", flattened_ouput_size) |
| 261 | for M2 in hidden_layer_sizes: |
| 262 | layer = HiddenLayer(M1, M2) |
| 263 | self.layers.append(layer) |
| 264 | M1 = M2 |
| 265 | |
| 266 | # final layer |
| 267 | layer = HiddenLayer(M1, K, lambda x: x) |
| 268 | self.layers.append(layer) |
| 269 | |
| 270 | # collect params for copy |
| 271 | self.params = [] |
| 272 | for layer in (self.conv_layers + self.layers): |
| 273 | self.params += layer.params |
| 274 | |
| 275 | |
| 276 | # calculate final output and cost |
| 277 | Z = conv_out |
| 278 | for layer in self.layers: |
| 279 | Z = layer.forward(Z) |
| 280 | Y_hat = Z |
| 281 |
nothing calls this directly
no test coverage detected