-
Notifications
You must be signed in to change notification settings - Fork 5.9k
Closed
Description
class RecognizeDigits(fluid.Program):
def _conv_net(img):
conv_pool_1 = fluid.nets.simple_img_conv_pool(
input=img,
filter_size=5,
num_filters=20,
pool_size=2,
pool_stride=2,
act="relu")
conv_pool_1 = fluid.layers.batch_norm(conv_pool_1)
conv_pool_2 = fluid.nets.simple_img_conv_pool(
input=conv_pool_1,
filter_size=5,
num_filters=50,
pool_size=2,
pool_stride=2,
act="relu")
prediction = fluid.layers.fc(input=conv_pool, size=10, act='softmax')
return prediction
@network('img', 'label')
def train_step():
img = fluid.layers.data(name='img', shape=[1, 28, 28], dtype='float32')
label = fluid.layers.data(name='label', shape=[1], dtype='int64')
with fluid.var_scope('prediction'):
prediction = _conv_net(img)
loss = fluid.layers.cross_entropy(input=prediction, label=label)
avg_loss = fluid.layers.mean(loss)
acc = fluid.layers.accuracy(input=prediction, label=label)
optimizer = fluid.optimizer.Adam(learning_rate=0.001)
optimizer.minimize(avg_loss)
return acc, avg_loss
@network('img', 'label')
def test_step():
img = fluid.layers.data(name='img', shape=[1, 28, 28], dtype='float32')
label = fluid.layers.data(name='label', shape=[1], dtype='int64')
with fluid.var_scope('prediction'):
prediction = _conv_net(img)
loss = fluid.layers.cross_entropy(input=prediction, label=label)
avg_loss = fluid.layers.mean(loss)
acc = fluid.layers.accuracy(input=prediction, label=label)
return acc, avg_loss
@network('img')
def infer():
img = fluid.layers.data(name='img', shape=[1, 28, 28], dtype='float32')
with fluid.var_scope('prediction'):
prediction = _conv_net(img)
return prediction
recognize_digits = RecognizeDigits().Compile()
train_reader = paddle.batch(paddle.reader.shuffle(paddle.dataset.mnist.train(), buf_size=500),
batch_size=BATCH_SIZE)
test_reader = paddle.batch(paddle.dataset.mnist.test(), batch_size=BATCH_SIZE)
NUM_EPOCHS = 100
for pass_id in range(NUM_EPOCHS):
for batch_id, data in enumerate(train_reader()):
recognize_digits.train_step(data[0], data[1])
if (batch_id + 1) % 10 == 0:
acc_set = []
avg_loss_set = []
for test_data in test_reader():
acc_np, avg_loss_np = recognize_digits.test_step(test_data[0], test_data[1])
acc_set.append(float(acc_np))
avg_loss_set.append(float(avg_loss_np))
# get test acc and loss
acc_val = numpy.array(acc_set).mean()
if float(acc_val) > 0.2:
fluid.save_parameters(recognize_digits.infer, "./inference_parameter")
break
tensor_img = numpy.random.uniform(-1.0, 1.0, [1, 1, 28, 28]).astype("float32")
prediction = recognize_digits.infer(tensor_img)
print predictionMetadata
Metadata
Labels
No labels