質問編集履歴

2 エラー内容の追加

rich

rich score 10

2017/08/22 15:04  投稿

TypeErrorとArgumentError
###前提・実現したいこと
現在、以下の書籍で勉強しています。
https://books.google.co.jp/books?id=egMlDwAAQBAJ&printsec=frontcover&hl=ja&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=false
###発生している問題・エラーメッセージ
```
一度目に動かすと、
TypeError: expected str, bytes or os.PathLike object, not NoneType
となり、二度目以降は
ArgumentError: argument --image_dir: conflicting option string: --image_dir
このようなエラーが出てしまいます。
 
追記  
ArgumentError                            Traceback (most recent call last)  
<ipython-input-20-3948841d33b1> in <module>()  
    19  
    20 FLAGS = tf.app.flags.FLAGS  
---> 21 tf.app.flags.DEFINE_string('image_dir', None, "学習画像のディレクトリ")  
    22  
    23 tf.app.flags.DEFINE_integer('batch_size', 128, "ミニバッチのサイズ")  
というようなエラーが出ています。  
別のコードで、flags.pyというファイルで  
in DEFINE_string(flag_name, default_value, docstring)  
    78    docstring: A helpful message explaining the use of the flag.  
    79  """  
---> 80  _define_helper(flag_name, default_value, docstring, str)  
    81  
    82  
 
n _define_helper(flag_name, default_value, docstring, flagtype)  
    63                              default=default_value,  
    64                              help=docstring,  
---> 65                              type=flagtype)  
    66  
    67  
というエラーが出ています。  
また、argparse.pyというファイルでも6つエラーが出ています。  
これらはArgumentErrorです。  
```
###該当のソースコード
```Python
import imghdr
import math
import os
import numpy as np
import tensorflow as tf
from PIL import Image
import util.current_time as current_time
from srcnn.image_loader_vvv import load_image
from srcnn.model import model915
from srcnn.model import model915_svs
from srcnn.model import model915_sigmoid
from srcnn.model import model955_sigmoid
from srcnn.model import model955_sigmoid_color
from srcnn.model import model955_sigmoid_bn_color
MODEL = model915_sigmoid
FLAGS = tf.app.flags.FLAGS
tf.app.flags.DEFINE_string('image_dir', None, "学習画像のディレクトリ")
tf.app.flags.DEFINE_integer('batch_size', 128, "ミニバッチのサイズ")
tf.app.flags.DEFINE_float('learning_rate', 0.001, "学習率")
tf.app.flags.DEFINE_string('train_dir', './train_sr',
                          "学習結果を保存するディレクトリ")
tf.app.flags.DEFINE_integer('scale', 2, "")
tf.app.flags.DEFINE_boolean('log_device_placement', False,
                           "opが実行されるデバイスを表示するかを選択")
tf.app.flags.DEFINE_integer('min_after_dequeue', 30000,
                           "dequeueをはじめるサンプル数")
tf.app.flags.DEFINE_integer('num_threads', 16, "処理するスレッド数")
tf.app.flags.DEFINE_integer('max_step', -1, "学習する最大ステップ数")
def __loss(sr_images, ground_truth):
 return tf.reduce_mean(
   tf.squared_difference(sr_images, ground_truth))
def __init_optimizer(learning_rate):
 opt = tf.train.AdamOptimizer(learning_rate)
 return opt
def __train(file_list, patches_count, train_dir):
 checkpoint_path = os.path.join(train_dir, 'model.ckpt')
 file_abort = os.path.join(train_dir, 'abort.now')
 print('batch_size %d' % FLAGS.batch_size)
 step_of_epoch = math.ceil(patches_count / FLAGS.batch_size)
 print('step of epoch %d' % step_of_epoch)
 images, ground_truths = load_image(
   file_list,
   MODEL.INPUT_SIZE, MODEL.OUTPUT_SIZE,
   channels=MODEL.CHANNELS,
   scale=FLAGS.scale,
   batch_size=FLAGS.batch_size // 4)
 capacity = FLAGS.min_after_dequeue + 4 * FLAGS.batch_size
 lr_image_batch, ground_truth_batch = tf.train.shuffle_batch(
   [images, ground_truths],
   batch_size=FLAGS.batch_size,
   capacity=capacity,
   enqueue_many=True,
   min_after_dequeue=FLAGS.min_after_dequeue,
   num_threads=FLAGS.num_threads)
 sr_images = MODEL.inference(lr_image_batch)
 summary_images = tf.concat([ground_truth_batch, sr_images], axis=1)
 tf.summary.image('images', summary_images, max_outputs=4)
 loss = __loss(sr_images, ground_truth_batch)
 tf.summary.scalar('total_loss', loss)
 global_step = tf.Variable(0, trainable=False)
 opt = __init_optimizer(FLAGS.learning_rate)
 train_op = opt.minimize(loss, global_step=global_step)
 config = tf.ConfigProto(
   allow_soft_placement=True,
   log_device_placement=FLAGS.log_device_placement)
 saver = tf.train.Saver(tf.global_variables(), max_to_keep=100)
 summary_op = tf.summary.merge_all()
 coord = tf.train.Coordinator()
 with tf.Session(config=config) as sess:
   checkpoint = tf.train.get_checkpoint_state(train_dir)
   if not (checkpoint and checkpoint.model_checkpoint_path):
     sess.run(tf.global_variables_initializer())
   else:
     saver.restore(sess, checkpoint.model_checkpoint_path)
   threads = tf.train.start_queue_runners(sess=sess, coord=coord)
   summary_writer = tf.summary.FileWriter(train_dir, sess.graph)
   step = 0
   try:
     while not coord.should_stop():
       start = current_time.in_millis()
       _, step, loss_value = sess.run(
         [train_op, global_step, loss]
       )
       assert not np.isnan(loss_value), \
         'Model diverged with loss = NaN'
       elapsed = current_time.in_millis() - start
       if step % 100 == 0:
         print('Step: %d, Loss: %.6f, Time: %dms / step' % (step, loss_value, elapsed))
       if step % 100 == 0:
         summary_str = sess.run(summary_op)
         summary_writer.add_summary(summary_str, step)
       if (step % 10000 == 0):
         saver.save(sess, checkpoint_path, global_step=step)
         if os.path.exists(file_abort):
           print('abort file(%s) detected.' % file_abort)
           break
       if FLAGS.max_step > 0 and FLAGS.max_step <= step:
         print('step limit %d reached' % FLAGS.max_step)
         saver.save(sess, checkpoint_path, global_step=step)
         break
   except tf.errors.OutOfRangeError:
     print('Done training -- epoch limit reached')
   finally:
     saver.save(sess, checkpoint_path, global_step=step)
     coord.request_stop()
   # Wait for threads to finish.
   coord.join(threads)
def __count_patches(image, patch_size):
 horizontal = math.ceil(image.width / patch_size)
 vertical = math.ceil(image.height / patch_size)
 return horizontal * vertical
def __check_size_and_count_patches(file_list, patch_size):
 count = 0
 result_list = []
 for file in file_list:
   with Image.open(file) as image:
     if image.height >= patch_size and image.width >= patch_size:
       result_list.append(file)
       count += __count_patches(image, patch_size)
     else:
       print('%s is dropped. %d:%d' % (file, image.height, image.width))
 return result_list, count
def main(argv=None):
 if not os.path.exists(FLAGS.train_dir):
   os.makedirs(FLAGS.train_dir)
 image_files = os.walk(FLAGS.image_dir)
 file_list = []
 for dirpath, dirs, files in image_files:
   png_files = list(filter(lambda f: f.lower().endswith('.jpg'), files))
   file_list.extend(list(map(lambda f: os.path.join(dirpath, f), png_files)))
 file_list = list(filter(lambda f: imghdr.what(f) == 'jpeg', file_list))
 file_list, patches_count = __check_size_and_count_patches(file_list, MODEL.INPUT_SIZE)
 print('%d, %d' % (len(file_list), patches_count))
 train_dir = os.path.join(FLAGS.train_dir, MODEL.NAME)
 if not os.path.exists(train_dir):
   os.makedirs(train_dir)
 __train(file_list, patches_count, train_dir)
if __name__ == '__main__':
 tf.app.run()
```
tf.app.flags.DEFINE_string('image_dir', None, "学習画像のディレクトリ")
この場合、image_dirは学習させる画像のディレクトリということでしょうか?
自分のPC内の画像ディレクトリはどこにかけば良いのでしょうか?
  • Python

    18064 questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 3.x

    13809 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1 タグ追加

rich

rich score 10

2017/08/21 20:16  投稿

TypeErrorとArgumentError
###前提・実現したいこと
現在、以下の書籍で勉強しています。
https://books.google.co.jp/books?id=egMlDwAAQBAJ&printsec=frontcover&hl=ja&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=false
###発生している問題・エラーメッセージ
```
一度目に動かすと、
TypeError: expected str, bytes or os.PathLike object, not NoneType
となり、二度目以降は
ArgumentError: argument --image_dir: conflicting option string: --image_dir
このようなエラーが出てしまいます。
```
###該当のソースコード
```Python
import imghdr
import math
import os
import numpy as np
import tensorflow as tf
from PIL import Image
import util.current_time as current_time
from srcnn.image_loader_vvv import load_image
from srcnn.model import model915
from srcnn.model import model915_svs
from srcnn.model import model915_sigmoid
from srcnn.model import model955_sigmoid
from srcnn.model import model955_sigmoid_color
from srcnn.model import model955_sigmoid_bn_color
MODEL = model915_sigmoid
FLAGS = tf.app.flags.FLAGS
tf.app.flags.DEFINE_string('image_dir', None, "学習画像のディレクトリ")
tf.app.flags.DEFINE_integer('batch_size', 128, "ミニバッチのサイズ")
tf.app.flags.DEFINE_float('learning_rate', 0.001, "学習率")
tf.app.flags.DEFINE_string('train_dir', './train_sr',
"学習結果を保存するディレクトリ")
tf.app.flags.DEFINE_integer('scale', 2, "")
tf.app.flags.DEFINE_boolean('log_device_placement', False,
"opが実行されるデバイスを表示するかを選択")
tf.app.flags.DEFINE_integer('min_after_dequeue', 30000,
"dequeueをはじめるサンプル数")
tf.app.flags.DEFINE_integer('num_threads', 16, "処理するスレッド数")
tf.app.flags.DEFINE_integer('max_step', -1, "学習する最大ステップ数")
def __loss(sr_images, ground_truth):
return tf.reduce_mean(
tf.squared_difference(sr_images, ground_truth))
def __init_optimizer(learning_rate):
opt = tf.train.AdamOptimizer(learning_rate)
return opt
def __train(file_list, patches_count, train_dir):
checkpoint_path = os.path.join(train_dir, 'model.ckpt')
file_abort = os.path.join(train_dir, 'abort.now')
print('batch_size %d' % FLAGS.batch_size)
step_of_epoch = math.ceil(patches_count / FLAGS.batch_size)
print('step of epoch %d' % step_of_epoch)
images, ground_truths = load_image(
file_list,
MODEL.INPUT_SIZE, MODEL.OUTPUT_SIZE,
channels=MODEL.CHANNELS,
scale=FLAGS.scale,
batch_size=FLAGS.batch_size // 4)
capacity = FLAGS.min_after_dequeue + 4 * FLAGS.batch_size
lr_image_batch, ground_truth_batch = tf.train.shuffle_batch(
[images, ground_truths],
batch_size=FLAGS.batch_size,
capacity=capacity,
enqueue_many=True,
min_after_dequeue=FLAGS.min_after_dequeue,
num_threads=FLAGS.num_threads)
sr_images = MODEL.inference(lr_image_batch)
summary_images = tf.concat([ground_truth_batch, sr_images], axis=1)
tf.summary.image('images', summary_images, max_outputs=4)
loss = __loss(sr_images, ground_truth_batch)
tf.summary.scalar('total_loss', loss)
global_step = tf.Variable(0, trainable=False)
opt = __init_optimizer(FLAGS.learning_rate)
train_op = opt.minimize(loss, global_step=global_step)
config = tf.ConfigProto(
allow_soft_placement=True,
log_device_placement=FLAGS.log_device_placement)
saver = tf.train.Saver(tf.global_variables(), max_to_keep=100)
summary_op = tf.summary.merge_all()
coord = tf.train.Coordinator()
with tf.Session(config=config) as sess:
checkpoint = tf.train.get_checkpoint_state(train_dir)
if not (checkpoint and checkpoint.model_checkpoint_path):
sess.run(tf.global_variables_initializer())
else:
saver.restore(sess, checkpoint.model_checkpoint_path)
threads = tf.train.start_queue_runners(sess=sess, coord=coord)
summary_writer = tf.summary.FileWriter(train_dir, sess.graph)
step = 0
try:
while not coord.should_stop():
start = current_time.in_millis()
_, step, loss_value = sess.run(
[train_op, global_step, loss]
)
assert not np.isnan(loss_value), \
'Model diverged with loss = NaN'
elapsed = current_time.in_millis() - start
if step % 100 == 0:
print('Step: %d, Loss: %.6f, Time: %dms / step' % (step, loss_value, elapsed))
if step % 100 == 0:
summary_str = sess.run(summary_op)
summary_writer.add_summary(summary_str, step)
if (step % 10000 == 0):
saver.save(sess, checkpoint_path, global_step=step)
if os.path.exists(file_abort):
print('abort file(%s) detected.' % file_abort)
break
if FLAGS.max_step > 0 and FLAGS.max_step <= step:
print('step limit %d reached' % FLAGS.max_step)
saver.save(sess, checkpoint_path, global_step=step)
break
except tf.errors.OutOfRangeError:
print('Done training -- epoch limit reached')
finally:
saver.save(sess, checkpoint_path, global_step=step)
coord.request_stop()
# Wait for threads to finish.
coord.join(threads)
def __count_patches(image, patch_size):
horizontal = math.ceil(image.width / patch_size)
vertical = math.ceil(image.height / patch_size)
return horizontal * vertical
def __check_size_and_count_patches(file_list, patch_size):
count = 0
result_list = []
for file in file_list:
with Image.open(file) as image:
if image.height >= patch_size and image.width >= patch_size:
result_list.append(file)
count += __count_patches(image, patch_size)
else:
print('%s is dropped. %d:%d' % (file, image.height, image.width))
return result_list, count
def main(argv=None):
if not os.path.exists(FLAGS.train_dir):
os.makedirs(FLAGS.train_dir)
image_files = os.walk(FLAGS.image_dir)
file_list = []
for dirpath, dirs, files in image_files:
png_files = list(filter(lambda f: f.lower().endswith('.jpg'), files))
file_list.extend(list(map(lambda f: os.path.join(dirpath, f), png_files)))
file_list = list(filter(lambda f: imghdr.what(f) == 'jpeg', file_list))
file_list, patches_count = __check_size_and_count_patches(file_list, MODEL.INPUT_SIZE)
print('%d, %d' % (len(file_list), patches_count))
train_dir = os.path.join(FLAGS.train_dir, MODEL.NAME)
if not os.path.exists(train_dir):
os.makedirs(train_dir)
__train(file_list, patches_count, train_dir)
if __name__ == '__main__':
tf.app.run()
```
tf.app.flags.DEFINE_string('image_dir', None, "学習画像のディレクトリ")
この場合、image_dirは学習させる画像のディレクトリということでしょうか?
自分のPC内の画像ディレクトリはどこにかけば良いのでしょうか?
  • Python 3.x

    13809 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Python

    18064 questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る