CoriolisGG 2021-12-07 15:20 采纳率: 0%
浏览 20
已结题

运行胶囊网络程序的报错

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容

img

我的解答思路和尝试过的方法
# Copyright 2015 The TensorFlow Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ==============================================================================

"""Implementation of the flags interface."""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import argparse as _argparse

from tensorflow.python.platform import tf_logging as _logging
from tensorflow.python.util.all_util import remove_undocumented

_global_parser = _argparse.ArgumentParser()


# pylint: disable=invalid-name


class _FlagValues(object):
  """Global container and accessor for flags and their values."""

  def __init__(self):
    self.__dict__['__flags'] = {}
    self.__dict__['__parsed'] = False
    self.__dict__['__required_flags'] = set()

  def _parse_flags(self, args=None):
    result, unparsed = _global_parser.parse_known_args(args=args)
    for flag_name, val in vars(result).items():
      self.__dict__['__flags'][flag_name] = val
    self.__dict__['__parsed'] = True
    self._assert_all_required()
    return unparsed

  def __getattr__(self, name):
    """Retrieves the 'value' attribute of the flag --name."""
    try:
      parsed = self.__dict__['__parsed']
    except KeyError:
      # May happen during pickle.load or copy.copy
      raise AttributeError(name)
    if not parsed:
      self._parse_flags()
    if name not in self.__dict__['__flags']:
      raise AttributeError(name)
    return self.__dict__['__flags'][name]

  def __setattr__(self, name, value):
    """Sets the 'value' attribute of the flag --name."""
    if not self.__dict__['__parsed']:
      self._parse_flags()
    self.__dict__['__flags'][name] = value
    self._assert_required(name)

  def _add_required_flag(self, item):
    self.__dict__['__required_flags'].add(item)

  def _assert_required(self, flag_name):
    if (flag_name not in self.__dict__['__flags'] or
        self.__dict__['__flags'][flag_name] is None):
      raise AttributeError('Flag --%s must be specified.' % flag_name)

  def _assert_all_required(self):
    for flag_name in self.__dict__['__required_flags']:
      self._assert_required(flag_name)


def _define_helper(flag_name, default_value, docstring, flagtype):
  """Registers 'flag_name' with 'default_value' and 'docstring'."""
  _global_parser.add_argument('--' + flag_name,
                              default=default_value,
                              help=docstring,
                              type=flagtype)


# Provides the global object that can be used to access flags.
FLAGS = _FlagValues()


def DEFINE_string(flag_name, default_value, docstring):
  """Defines a flag of type 'string'.

  Args:
    flag_name: The name of the flag as a string.
    default_value: The default value the flag should take as a string.
    docstring: A helpful message explaining the use of the flag.
  """
  _define_helper(flag_name, default_value, docstring, str)


def DEFINE_integer(flag_name, default_value, docstring):
  """Defines a flag of type 'int'.

  Args:
    flag_name: The name of the flag as a string.
    default_value: The default value the flag should take as an int.
    docstring: A helpful message explaining the use of the flag.
  """
  _define_helper(flag_name, default_value, docstring, int)


def DEFINE_boolean(flag_name, default_value, docstring):
  """Defines a flag of type 'boolean'.

  Args:
    flag_name: The name of the flag as a string.
    default_value: The default value the flag should take as a boolean.
    docstring: A helpful message explaining the use of the flag.
  """
  # Register a custom function for 'bool' so --flag=True works.
  def str2bool(v):
    return v.lower() in ('true', 't', '1')
  _global_parser.add_argument('--' + flag_name,
                              nargs='?',
                              const=True,
                              help=docstring,
                              default=default_value,
                              type=str2bool)

  # Add negated version, stay consistent with argparse with regard to
  # dashes in flag names.
  _global_parser.add_argument('--no' + flag_name,
                              action='store_false',
                              dest=flag_name.replace('-', '_'))


# The internal google library defines the following alias, so we match
# the API for consistency.
DEFINE_bool = DEFINE_boolean  # pylint: disable=invalid-name


def DEFINE_float(flag_name, default_value, docstring):
  """Defines a flag of type 'float'.

  Args:
    flag_name: The name of the flag as a string.
    default_value: The default value the flag should take as a float.
    docstring: A helpful message explaining the use of the flag.
  """
  _define_helper(flag_name, default_value, docstring, float)


def mark_flag_as_required(flag_name):
  """Ensures that flag is not None during program execution.
  
  It is recommended to call this method like this:
  
    if __name__ == '__main__':
      tf.flags.mark_flag_as_required('your_flag_name')
      tf.app.run()
  
  Args:
    flag_name: string, name of the flag to mark as required.
 
  Raises:
    AttributeError: if flag_name is not registered as a valid flag name.
      NOTE: The exception raised will change in the future. 
  """
  if _global_parser.get_default(flag_name) is not None:
    _logging.warn(
        'Flag %s has a non-None default value; therefore, '
        'mark_flag_as_required will pass even if flag is not specified in the '
        'command line!' % flag_name)
  FLAGS._add_required_flag(flag_name)


def mark_flags_as_required(flag_names):
  """Ensures that flags are not None during program execution.
  
  Recommended usage:
  
    if __name__ == '__main__':
      tf.flags.mark_flags_as_required(['flag1', 'flag2', 'flag3'])
      tf.app.run()
  
  Args:
    flag_names: a list/tuple of flag names to mark as required.

  Raises:
    AttributeError: If any of flag name has not already been defined as a flag.
      NOTE: The exception raised will change in the future.
  """
  for flag_name in flag_names:
    mark_flag_as_required(flag_name)


_allowed_symbols = [
    # We rely on gflags documentation.
    'DEFINE_bool',
    'DEFINE_boolean',
    'DEFINE_float',
    'DEFINE_integer',
    'DEFINE_string',
    'FLAGS',
    'mark_flag_as_required',
    'mark_flags_as_required',
]
remove_undocumented(__name__, _allowed_symbols)

我想要达到的结果
  • 写回答

2条回答 默认 最新

  • CoriolisGG 2021-12-07 15:22
    关注
    
    import os
    import sys
    import numpy as np
    import tensorflow as tf
    from tqdm import tqdm
    
    from config import cfg
    from utils import load_data
    from capsNet import CapsNet
    
    
    def save_to():
        if not os.path.exists(cfg.results):
            os.mkdir(cfg.results)
        if cfg.is_training:
            loss = cfg.results + '/loss.csv'
            train_acc = cfg.results + '/train_acc.csv'
            val_acc = cfg.results + '/val_acc.csv'
    
            if os.path.exists(val_acc):
                os.remove(val_acc)
            if os.path.exists(loss):
                os.remove(loss)
            if os.path.exists(train_acc):
                os.remove(train_acc)
    
            fd_train_acc = open(train_acc, 'w')
            fd_train_acc.write('step,train_acc\n')
            fd_loss = open(loss, 'w')
            fd_loss.write('step,loss\n')
            fd_val_acc = open(val_acc, 'w')
            fd_val_acc.write('step,val_acc\n')
            return(fd_train_acc, fd_loss, fd_val_acc)
        else:
            test_acc = cfg.results + '/test_acc.csv'
            if os.path.exists(test_acc):
                os.remove(test_acc)
            fd_test_acc = open(test_acc, 'w')
            fd_test_acc.write('test_acc\n')
            return(fd_test_acc)
    
    
    def train(model, supervisor, num_label):
        trX, trY, num_tr_batch, valX, valY, num_val_batch = load_data(cfg.dataset, cfg.batch_size, is_training=True)
        Y = valY[:num_val_batch * cfg.batch_size].reshape((-1, 1))
    
        fd_train_acc, fd_loss, fd_val_acc = save_to()
        config = tf.ConfigProto()
        config.gpu_options.allow_growth = True
        with supervisor.managed_session(config=config) as sess:
            print("\nNote: all of results will be saved to directory: " + cfg.results)
            for epoch in range(cfg.epoch):
                print("Training for epoch %d/%d:" % (epoch, cfg.epoch))
                if supervisor.should_stop():
                    print('supervisor stoped!')
                    break
                for step in tqdm(range(num_tr_batch), total=num_tr_batch, ncols=70, leave=False, unit='b'):
                    start = step * cfg.batch_size
                    end = start + cfg.batch_size
                    global_step = epoch * num_tr_batch + step
    
                    if global_step % cfg.train_sum_freq == 0:
                        _, loss, train_acc, summary_str = sess.run([model.train_op, model.total_loss, model.accuracy, model.train_summary])
                        assert not np.isnan(loss), 'Something wrong! loss is nan...'
                        supervisor.summary_writer.add_summary(summary_str, global_step)
    
                        fd_loss.write(str(global_step) + ',' + str(loss) + "\n")
                        fd_loss.flush()
                        fd_train_acc.write(str(global_step) + ',' + str(train_acc / cfg.batch_size) + "\n")
                        fd_train_acc.flush()
                    else:
                        sess.run(model.train_op)
    
                    if cfg.val_sum_freq != 0 and (global_step) % cfg.val_sum_freq == 0:
                        val_acc = 0
                        for i in range(num_val_batch):
                            start = i * cfg.batch_size
                            end = start + cfg.batch_size
                            acc = sess.run(model.accuracy, {model.X: valX[start:end], model.labels: valY[start:end]})
                            val_acc += acc
                        val_acc = val_acc / (cfg.batch_size * num_val_batch)
                        fd_val_acc.write(str(global_step) + ',' + str(val_acc) + '\n')
                        fd_val_acc.flush()
    
                if (epoch + 1) % cfg.save_freq == 0:
                    supervisor.saver.save(sess, cfg.logdir + '/model_epoch_%04d_step_%02d' % (epoch, global_step))
    
            fd_val_acc.close()
            fd_train_acc.close()
            fd_loss.close()
    
    
    def evaluation(model, supervisor, num_label):
        teX, teY, num_te_batch = load_data(cfg.dataset, cfg.batch_size, is_training=False)
        fd_test_acc = save_to()
        with supervisor.managed_session(config=tf.ConfigProto(allow_soft_placement=True)) as sess:
            supervisor.saver.restore(sess, tf.train.latest_checkpoint(cfg.logdir))
            tf.logging.info('Model restored!')
    
            test_acc = 0
            for i in tqdm(range(num_te_batch), total=num_te_batch, ncols=70, leave=False, unit='b'):
                start = i * cfg.batch_size
                end = start + cfg.batch_size
                acc = sess.run(model.accuracy, {model.X: teX[start:end], model.labels: teY[start:end]})
                test_acc += acc
            test_acc = test_acc / (cfg.batch_size * num_te_batch)
            fd_test_acc.write(str(test_acc))
            fd_test_acc.close()
            print('Test accuracy has been saved to ' + cfg.results + '/test_acc.csv')
    
    
    def main(_):
        tf.logging.info(' Loading Graph...')
        num_label = 10
        model = CapsNet()
        tf.logging.info(' Graph loaded')
    
        sv = tf.train.Supervisor(graph=model.graph, logdir=cfg.logdir, save_model_secs=0)
    
        if cfg.is_training:
            tf.logging.info(' Start training...')
            train(model, sv, num_label)
            tf.logging.info('Training done')
        else:
            evaluation(model, sv, num_label)
    
    if __name__ == "__main__":
        tf.app.run()
    
    评论

报告相同问题?

问题事件

  • 系统已结题 12月15日
  • 创建了问题 12月7日

悬赏问题

  • ¥15 Opencv(C++)异常
  • ¥15 VScode上配置C语言环境
  • ¥15 汇编语言没有主程序吗?
  • ¥15 这个函数为什么会爆内存
  • ¥15 无法装系统,grub成了顽固拦路虎
  • ¥15 springboot aop 应用启动异常
  • ¥15 matlab有关债券凸性久期的代码
  • ¥15 lvgl v8.2定时器提前到来
  • ¥15 qtcp 发送数据时偶尔会遇到发送数据失败?用的MSVC编译器(标签-qt|关键词-tcp)
  • ¥15 cam_lidar_calibration报错