提交 5cda7770 编写于 作者: Z zenghsh3

use argmax flatten of fluid

上级 2409c61c
...@@ -5,7 +5,6 @@ import numpy as np ...@@ -5,7 +5,6 @@ import numpy as np
import paddle.fluid as fluid import paddle.fluid as fluid
from paddle.fluid.param_attr import ParamAttr from paddle.fluid.param_attr import ParamAttr
from tqdm import tqdm from tqdm import tqdm
from utils import fluid_flatten
class DQNModel(object): class DQNModel(object):
...@@ -98,50 +97,50 @@ class DQNModel(object): ...@@ -98,50 +97,50 @@ class DQNModel(object):
conv1 = fluid.layers.conv2d( conv1 = fluid.layers.conv2d(
input=image, input=image,
num_filters=32, num_filters=32,
filter_size=[5, 5], filter_size=5,
stride=[1, 1], stride=1,
padding=[2, 2], padding=2,
act='relu', act='relu',
param_attr=ParamAttr(name='{}_conv1'.format(variable_field)), param_attr=ParamAttr(name='{}_conv1'.format(variable_field)),
bias_attr=ParamAttr(name='{}_conv1_b'.format(variable_field))) bias_attr=ParamAttr(name='{}_conv1_b'.format(variable_field)))
max_pool1 = fluid.layers.pool2d( max_pool1 = fluid.layers.pool2d(
input=conv1, pool_size=[2, 2], pool_stride=[2, 2], pool_type='max') input=conv1, pool_size=2, pool_stride=2, pool_type='max')
conv2 = fluid.layers.conv2d( conv2 = fluid.layers.conv2d(
input=max_pool1, input=max_pool1,
num_filters=32, num_filters=32,
filter_size=[5, 5], filter_size=5,
stride=[1, 1], stride=1,
padding=[2, 2], padding=2,
act='relu', act='relu',
param_attr=ParamAttr(name='{}_conv2'.format(variable_field)), param_attr=ParamAttr(name='{}_conv2'.format(variable_field)),
bias_attr=ParamAttr(name='{}_conv2_b'.format(variable_field))) bias_attr=ParamAttr(name='{}_conv2_b'.format(variable_field)))
max_pool2 = fluid.layers.pool2d( max_pool2 = fluid.layers.pool2d(
input=conv2, pool_size=[2, 2], pool_stride=[2, 2], pool_type='max') input=conv2, pool_size=2, pool_stride=2, pool_type='max')
conv3 = fluid.layers.conv2d( conv3 = fluid.layers.conv2d(
input=max_pool2, input=max_pool2,
num_filters=64, num_filters=64,
filter_size=[4, 4], filter_size=4,
stride=[1, 1], stride=1,
padding=[1, 1], padding=1,
act='relu', act='relu',
param_attr=ParamAttr(name='{}_conv3'.format(variable_field)), param_attr=ParamAttr(name='{}_conv3'.format(variable_field)),
bias_attr=ParamAttr(name='{}_conv3_b'.format(variable_field))) bias_attr=ParamAttr(name='{}_conv3_b'.format(variable_field)))
max_pool3 = fluid.layers.pool2d( max_pool3 = fluid.layers.pool2d(
input=conv3, pool_size=[2, 2], pool_stride=[2, 2], pool_type='max') input=conv3, pool_size=2, pool_stride=2, pool_type='max')
conv4 = fluid.layers.conv2d( conv4 = fluid.layers.conv2d(
input=max_pool3, input=max_pool3,
num_filters=64, num_filters=64,
filter_size=[3, 3], filter_size=3,
stride=[1, 1], stride=1,
padding=[1, 1], padding=1,
act='relu', act='relu',
param_attr=ParamAttr(name='{}_conv4'.format(variable_field)), param_attr=ParamAttr(name='{}_conv4'.format(variable_field)),
bias_attr=ParamAttr(name='{}_conv4_b'.format(variable_field))) bias_attr=ParamAttr(name='{}_conv4_b'.format(variable_field)))
flatten = fluid_flatten(conv4) flatten = fluid.layers.flatten(conv4, axis=1)
out = fluid.layers.fc( out = fluid.layers.fc(
input=flatten, input=flatten,
......
...@@ -5,7 +5,6 @@ import numpy as np ...@@ -5,7 +5,6 @@ import numpy as np
import paddle.fluid as fluid import paddle.fluid as fluid
from paddle.fluid.param_attr import ParamAttr from paddle.fluid.param_attr import ParamAttr
from tqdm import tqdm from tqdm import tqdm
from utils import fluid_flatten, fluid_argmax
class DoubleDQNModel(object): class DoubleDQNModel(object):
...@@ -62,7 +61,8 @@ class DoubleDQNModel(object): ...@@ -62,7 +61,8 @@ class DoubleDQNModel(object):
targetQ_predict_value = self.get_DQN_prediction(next_s, target=True) targetQ_predict_value = self.get_DQN_prediction(next_s, target=True)
next_s_predcit_value = self.get_DQN_prediction(next_s) next_s_predcit_value = self.get_DQN_prediction(next_s)
greedy_action = fluid_argmax(next_s_predcit_value) greedy_action = fluid.layers.argmax(next_s_predcit_value, axis=1)
greedy_action = fluid.layers.unsqueeze(greedy_action, axes=[1])
predict_onehot = fluid.layers.one_hot(greedy_action, self.action_dim) predict_onehot = fluid.layers.one_hot(greedy_action, self.action_dim)
best_v = fluid.layers.reduce_sum( best_v = fluid.layers.reduce_sum(
...@@ -105,50 +105,50 @@ class DoubleDQNModel(object): ...@@ -105,50 +105,50 @@ class DoubleDQNModel(object):
conv1 = fluid.layers.conv2d( conv1 = fluid.layers.conv2d(
input=image, input=image,
num_filters=32, num_filters=32,
filter_size=[5, 5], filter_size=5,
stride=[1, 1], stride=1,
padding=[2, 2], padding=2,
act='relu', act='relu',
param_attr=ParamAttr(name='{}_conv1'.format(variable_field)), param_attr=ParamAttr(name='{}_conv1'.format(variable_field)),
bias_attr=ParamAttr(name='{}_conv1_b'.format(variable_field))) bias_attr=ParamAttr(name='{}_conv1_b'.format(variable_field)))
max_pool1 = fluid.layers.pool2d( max_pool1 = fluid.layers.pool2d(
input=conv1, pool_size=[2, 2], pool_stride=[2, 2], pool_type='max') input=conv1, pool_size=2, pool_stride=2, pool_type='max')
conv2 = fluid.layers.conv2d( conv2 = fluid.layers.conv2d(
input=max_pool1, input=max_pool1,
num_filters=32, num_filters=32,
filter_size=[5, 5], filter_size=5,
stride=[1, 1], stride=1,
padding=[2, 2], padding=2,
act='relu', act='relu',
param_attr=ParamAttr(name='{}_conv2'.format(variable_field)), param_attr=ParamAttr(name='{}_conv2'.format(variable_field)),
bias_attr=ParamAttr(name='{}_conv2_b'.format(variable_field))) bias_attr=ParamAttr(name='{}_conv2_b'.format(variable_field)))
max_pool2 = fluid.layers.pool2d( max_pool2 = fluid.layers.pool2d(
input=conv2, pool_size=[2, 2], pool_stride=[2, 2], pool_type='max') input=conv2, pool_size=2, pool_stride=2, pool_type='max')
conv3 = fluid.layers.conv2d( conv3 = fluid.layers.conv2d(
input=max_pool2, input=max_pool2,
num_filters=64, num_filters=64,
filter_size=[4, 4], filter_size=4,
stride=[1, 1], stride=1,
padding=[1, 1], padding=1,
act='relu', act='relu',
param_attr=ParamAttr(name='{}_conv3'.format(variable_field)), param_attr=ParamAttr(name='{}_conv3'.format(variable_field)),
bias_attr=ParamAttr(name='{}_conv3_b'.format(variable_field))) bias_attr=ParamAttr(name='{}_conv3_b'.format(variable_field)))
max_pool3 = fluid.layers.pool2d( max_pool3 = fluid.layers.pool2d(
input=conv3, pool_size=[2, 2], pool_stride=[2, 2], pool_type='max') input=conv3, pool_size=2, pool_stride=2, pool_type='max')
conv4 = fluid.layers.conv2d( conv4 = fluid.layers.conv2d(
input=max_pool3, input=max_pool3,
num_filters=64, num_filters=64,
filter_size=[3, 3], filter_size=3,
stride=[1, 1], stride=1,
padding=[1, 1], padding=1,
act='relu', act='relu',
param_attr=ParamAttr(name='{}_conv4'.format(variable_field)), param_attr=ParamAttr(name='{}_conv4'.format(variable_field)),
bias_attr=ParamAttr(name='{}_conv4_b'.format(variable_field))) bias_attr=ParamAttr(name='{}_conv4_b'.format(variable_field)))
flatten = fluid_flatten(conv4) flatten = fluid.layers.flatten(conv4, axis=1)
out = fluid.layers.fc( out = fluid.layers.fc(
input=flatten, input=flatten,
......
...@@ -5,7 +5,6 @@ import numpy as np ...@@ -5,7 +5,6 @@ import numpy as np
import paddle.fluid as fluid import paddle.fluid as fluid
from paddle.fluid.param_attr import ParamAttr from paddle.fluid.param_attr import ParamAttr
from tqdm import tqdm from tqdm import tqdm
from utils import fluid_flatten
class DuelingDQNModel(object): class DuelingDQNModel(object):
...@@ -98,50 +97,50 @@ class DuelingDQNModel(object): ...@@ -98,50 +97,50 @@ class DuelingDQNModel(object):
conv1 = fluid.layers.conv2d( conv1 = fluid.layers.conv2d(
input=image, input=image,
num_filters=32, num_filters=32,
filter_size=[5, 5], filter_size=5,
stride=[1, 1], stride=1,
padding=[2, 2], padding=2,
act='relu', act='relu',
param_attr=ParamAttr(name='{}_conv1'.format(variable_field)), param_attr=ParamAttr(name='{}_conv1'.format(variable_field)),
bias_attr=ParamAttr(name='{}_conv1_b'.format(variable_field))) bias_attr=ParamAttr(name='{}_conv1_b'.format(variable_field)))
max_pool1 = fluid.layers.pool2d( max_pool1 = fluid.layers.pool2d(
input=conv1, pool_size=[2, 2], pool_stride=[2, 2], pool_type='max') input=conv1, pool_size=2, pool_stride=2, pool_type='max')
conv2 = fluid.layers.conv2d( conv2 = fluid.layers.conv2d(
input=max_pool1, input=max_pool1,
num_filters=32, num_filters=32,
filter_size=[5, 5], filter_size=5,
stride=[1, 1], stride=1,
padding=[2, 2], padding=2,
act='relu', act='relu',
param_attr=ParamAttr(name='{}_conv2'.format(variable_field)), param_attr=ParamAttr(name='{}_conv2'.format(variable_field)),
bias_attr=ParamAttr(name='{}_conv2_b'.format(variable_field))) bias_attr=ParamAttr(name='{}_conv2_b'.format(variable_field)))
max_pool2 = fluid.layers.pool2d( max_pool2 = fluid.layers.pool2d(
input=conv2, pool_size=[2, 2], pool_stride=[2, 2], pool_type='max') input=conv2, pool_size=2, pool_stride=2, pool_type='max')
conv3 = fluid.layers.conv2d( conv3 = fluid.layers.conv2d(
input=max_pool2, input=max_pool2,
num_filters=64, num_filters=64,
filter_size=[4, 4], filter_size=4,
stride=[1, 1], stride=1,
padding=[1, 1], padding=1,
act='relu', act='relu',
param_attr=ParamAttr(name='{}_conv3'.format(variable_field)), param_attr=ParamAttr(name='{}_conv3'.format(variable_field)),
bias_attr=ParamAttr(name='{}_conv3_b'.format(variable_field))) bias_attr=ParamAttr(name='{}_conv3_b'.format(variable_field)))
max_pool3 = fluid.layers.pool2d( max_pool3 = fluid.layers.pool2d(
input=conv3, pool_size=[2, 2], pool_stride=[2, 2], pool_type='max') input=conv3, pool_size=2, pool_stride=2, pool_type='max')
conv4 = fluid.layers.conv2d( conv4 = fluid.layers.conv2d(
input=max_pool3, input=max_pool3,
num_filters=64, num_filters=64,
filter_size=[3, 3], filter_size=3,
stride=[1, 1], stride=1,
padding=[1, 1], padding=1,
act='relu', act='relu',
param_attr=ParamAttr(name='{}_conv4'.format(variable_field)), param_attr=ParamAttr(name='{}_conv4'.format(variable_field)),
bias_attr=ParamAttr(name='{}_conv4_b'.format(variable_field))) bias_attr=ParamAttr(name='{}_conv4_b'.format(variable_field)))
flatten = fluid_flatten(conv4) flatten = fluid.layers.flatten(conv4, axis=1)
value = fluid.layers.fc( value = fluid.layers.fc(
input=flatten, input=flatten,
......
#-*- coding: utf-8 -*-
#File: utils.py
import paddle.fluid as fluid
import numpy as np
def fluid_argmax(x):
"""
Get index of max value for the last dimension
"""
_, max_index = fluid.layers.topk(x, k=1)
return max_index
def fluid_flatten(x):
"""
Flatten fluid variable along the first dimension
"""
return fluid.layers.reshape(x, shape=[-1, np.prod(x.shape[1:])])
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册