def model_v9(input_shape, nb_actions): model = Sequential() if common.image_dim_ordering() == 'tf': # (width, height, channels) model.add(Permute((2, 3, 1), input_shape=input_shape)) elif common.image_dim_ordering() == 'th': # (channels, width, height) model.add(Permute((1, 2, 3), input_shape=input_shape)) else: raise RuntimeError('Unknown image_dim_ordering.') model.add(Convolution2D(15, (4, 4), strides=(1, 1))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Convolution2D(30, (3, 3), strides=(1, 1))) model.add(Activation('relu')) model.add(Convolution2D(60, (3, 3), strides=(1, 1))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Flatten()) model.add(Dense(600)) model.add(Activation('relu')) model.add(Dense(300)) model.add(Activation('relu')) model.add(Dense(200)) model.add(Activation('relu')) model.add(Dense(nb_actions)) model.add(Activation('linear')) print(model.summary()) print(model.count_params()) return model
def deconv3d(x, kernel, output_shape, strides=(1, 1, 1), border_mode='valid', dim_ordering='default', image_shape=None, filter_shape=None): '''3D deconvolution (transposed convolution). # Arguments kernel: kernel tensor. output_shape: desired dimensions of output. strides: strides tuple. border_mode: string, "same" or "valid". dim_ordering: "tf" or "th". Whether to use Theano or TensorFlow dimension ordering in inputs/kernels/ouputs. ''' flip_filters = False if dim_ordering == 'default': dim_ordering = image_dim_ordering() if dim_ordering not in {'th', 'tf'}: raise ValueError('Unknown dim_ordering ' + str(dim_ordering)) if dim_ordering == 'tf': output_shape = (output_shape[0], output_shape[4], output_shape[1], output_shape[2], output_shape[3]) x = _preprocess_conv3d_input(x, dim_ordering) kernel = _preprocess_conv3d_kernel(kernel, dim_ordering) kernel = kernel.dimshuffle((1, 0, 2, 3, 4)) th_border_mode = _preprocess_border_mode(border_mode) if hasattr(kernel, '_keras_shape'): kernel_shape = kernel._keras_shape else: # Will only work if `kernel` is a shared variable. kernel_shape = kernel.eval().shape filter_shape = _preprocess_conv3d_filter_shape(dim_ordering, filter_shape) filter_shape = tuple(filter_shape[i] for i in (1, 0, 2, 3, 4)) conv_out = T.nnet.abstract_conv.conv3d_grad_wrt_inputs( x, kernel, output_shape, filter_shape=filter_shape, border_mode=th_border_mode, subsample=strides, filter_flip=not flip_filters) conv_out = _postprocess_conv3d_output(conv_out, x, border_mode, kernel_shape, strides, dim_ordering) return conv_out
def __init__(self, image_size, depth=16, k=8): self._depth = depth self._k = k self._dropout_probability = 0 self._weight_decay = 0.0005 self._use_bias = False self._weight_init = "he_normal" if K.image_dim_ordering() == "th": logging.debug("image_dim_ordering = 'th'") self._channel_axis = 1 self._input_shape = (3, image_size, image_size) else: logging.debug("image_dim_ordering = 'tf'") self._channel_axis = -1 self._input_shape = (image_size, image_size, 3)
def deconv3d(x, kernel, output_shape, strides=(1, 1, 1), border_mode='valid', dim_ordering='default', image_shape=None, filter_shape=None): '''3D deconvolution (i.e. transposed convolution). # Arguments x: input tensor. kernel: kernel tensor. output_shape: 1D int tensor for the output shape. strides: strides tuple. border_mode: string, "same" or "valid". dim_ordering: "tf" or "th". Whether to use Theano or TensorFlow dimension ordering for inputs/kernels/ouputs. # Returns A tensor, result of transposed 3D convolution. # Raises ValueError: if `dim_ordering` is neither `tf` or `th`. ''' if dim_ordering == 'default': dim_ordering = image_dim_ordering() if dim_ordering not in {'th', 'tf'}: raise ValueError('Unknown dim_ordering ' + str(dim_ordering)) x = _preprocess_conv3d_input(x, dim_ordering) output_shape = _preprocess_deconv_output_shape(x, output_shape, dim_ordering) kernel = _preprocess_conv3d_kernel(kernel, dim_ordering) kernel = tf.transpose(kernel, (0, 1, 2, 4, 3)) padding = _preprocess_border_mode(border_mode) strides = (1, ) + strides + (1, ) x = tf.nn.conv3d_transpose(x, kernel, output_shape, strides, padding=padding) return _postprocess_conv3d_output(x, dim_ordering)
parser = argparse.ArgumentParser() parser.add_argument('--mode', choices=['train', 'test'], default='train') parser.add_argument('--env-name', type=str, default='BreakoutDeterministic-v4') parser.add_argument('--weights', type=str, default=None) args = parser.parse_args() # Get the environment and extract the number of actions. env = gym.make(args.env_name) np.random.seed(123) env.seed(123) nb_actions = env.action_space.n # Next, we build our model. We use the same model that was described by Mnih et al. (2015). input_shape = (WINDOW_LENGTH, ) + INPUT_SHAPE model = Sequential() if common.image_dim_ordering() == 'tf': # (width, height, channels) model.add(Permute((2, 3, 1), input_shape=input_shape)) elif common.image_dim_ordering() == 'th': # (channels, width, height) model.add(Permute((1, 2, 3), input_shape=input_shape)) else: raise RuntimeError('Unknown image_dim_ordering.') model.add(Convolution2D(32, (8, 8), strides=(4, 4))) model.add(Activation('relu')) model.add(Convolution2D(64, (4, 4), strides=(2, 2))) model.add(Activation('relu')) model.add(Convolution2D(64, (3, 3), strides=(1, 1))) model.add(Activation('relu')) model.add(Flatten()) model.add(Dense(512))