1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Python > autopep8を試してみた

Last updated at Posted at 2017-02-07
動作環境
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 14.04 LTS desktop amd64
TensorFlow v0.11
cuDNN v5.1 for Linux
CUDA v8.0
Python 2.7.6
IPython 5.1.0 -- An enhanced Interactive Python.
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4

関連 http://qiita.com/7of9/items/872d80d2a1cc36b5a053

@shiracamus さんのコメントにて教えていただいたautopep8を試してみました。

インストール

$sudo apt-get install python-autopep8

処理前コード

実装途中のTensorFlowのコード

learn_in100out100.py
# !/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import tensorflow as tf
import tensorflow.contrib.slim as slim
import numpy as np

'''
v0.1 Feb. 06, 2017
    - read [test_in.csv],[test_out.csv]
'''

'''
codingrule:PEP8
'''

filename_inp = tf.train.string_input_producer(["test_in.csv"])
filename_out = tf.train.string_input_producer(["test_out.csv"])
NUM_INP_NODE = 100
NUM_OUT_NODE = 100

# parse csv
# a. input node
reader = tf.TextLineReader()
key, value = reader.read(filename_inp)
deflist = [[0.] for idx in range(NUM_INP_NODE)]
input1 = tf.decode_csv(value, record_defaults=deflist)
# b. output node
key, value = reader.read(filename_out)
deflist = [[0.] for idx in range(NUM_OUT_NODE)]
output1 = tf.decode_csv(value, record_defaults=deflist)
# c. pack
inputs = tf.pack([input1])
outputs = tf.pack([output1])

batch_size = 1
inputs_batch, output_batch = tf.train.shuffle_batch([inputs, outputs], batch_size, capacity=1, min_after_dequeue=batch_size)

input_ph = tf.placeholder("float", [None, 1])
output_ph = tf.placeholder("float", [None, 1])

# network
hiddens = slim.stack(input_ph, slim.fully_connected, [7,7,7],
    activation_fn=tf.nn.sigmoid, scope="hidden")
prediction = slim.fully_connected(hiddens, 1, activation_fn=None, scope="output")
loss = tf.contrib.losses.mean_squared_error(prediction, output_ph)

train_op = slim.learning.create_train_op(loss, tf.train.AdamOptimizer(0.001))

init_op = tf.initialize_all_variables()

with tf.Session() as sess:
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(sess=sess, coord=coord)

    try:
        sess.run(init_op)
        for idx in range(10):
            inpbt, outbt = sess.run([inputs_batch, output_batch])
            _, t_loss = sess.run([train_op, loss], feed_dict={input_ph:inpbt, output_ph:outbt})

            if (idx+1) % 100 == 0:
            	print("%d,%f" % (idx+1, t_loss))
    finally:
        coord.request_stop()

処理

処理結果は標準出力されるので、適当なファイル名を付けて保存した。

$autopep8 learn_in100out100.py > res.py

比較

$ diff learn_in100out100.py res.py 
38c38,39
< inputs_batch, output_batch = tf.train.shuffle_batch([inputs, outputs], batch_size, capacity=1, min_after_dequeue=batch_size)
---
> inputs_batch, output_batch = tf.train.shuffle_batch(
>     [inputs, outputs], batch_size, capacity=1, min_after_dequeue=batch_size)
44,46c45,48
< hiddens = slim.stack(input_ph, slim.fully_connected, [7,7,7],
<     activation_fn=tf.nn.sigmoid, scope="hidden")
< prediction = slim.fully_connected(hiddens, 1, activation_fn=None, scope="output")
---
> hiddens = slim.stack(input_ph, slim.fully_connected, [7, 7, 7],
>                      activation_fn=tf.nn.sigmoid, scope="hidden")
> prediction = slim.fully_connected(
>     hiddens, 1, activation_fn=None, scope="output")
61c63,64
<             _, t_loss = sess.run([train_op, loss], feed_dict={input_ph:inpbt, output_ph:outbt})
---
>             _, t_loss = sess.run(
>                 [train_op, loss], feed_dict={input_ph: inpbt, output_ph: outbt})
63,64c66,67
<             if (idx+1) % 100 == 0:
<             	print("%d,%f" % (idx+1, t_loss))
---
>             if (idx + 1) % 100 == 0:
>                 print("%d,%f" % (idx + 1, t_loss))
67d69
< 

引数がリストの場合は(の位置に合わせるというルールは除外されるのだろうか。
( tf.train.shuffle_batch()_, t_loss = sess.run()の部分 )

処理前・後のpep8

$ pep8 learn_in100out100.py 
learn_in100out100.py:38:80: E501 line too long (124 > 79 characters)
learn_in100out100.py:44:56: E231 missing whitespace after ','
learn_in100out100.py:44:58: E231 missing whitespace after ','
learn_in100out100.py:45:5: E128 continuation line under-indented for visual indent
learn_in100out100.py:46:80: E501 line too long (81 > 79 characters)
learn_in100out100.py:61:71: E231 missing whitespace after ':'
learn_in100out100.py:61:80: E501 line too long (95 > 79 characters)
learn_in100out100.py:61:88: E231 missing whitespace after ':'
learn_in100out100.py:64:13: E101 indentation contains mixed spaces and tabs
learn_in100out100.py:64:13: W191 indentation contains tabs
learn_in100out100.py:67:1: W391 blank line at end of file
$ pep8 res.py 
res.py:64:80: E501 line too long (80 > 79 characters)

1つだけ残ったのは以下。

            _, t_loss = sess.run(
                [train_op, loss], feed_dict={input_ph: inpbt, output_ph: outbt})

autopep8を使って処理される部分を参考にして、自分のコーディングを向上すればいいだろう。

autopep8を通せばとりあえずOKという使い方は良くないだろう。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?