【问题标题】:TypeError: 'int' object is not iterable while training a neural networkTypeError:“int”对象在训练神经网络时不可迭代
【发布时间】:2021-03-25 06:55:52
【问题描述】:

我正在尝试训练 NeRF (https://github.com/bmild/nerf),以下是我遇到的错误。我试图打印变量的数据类型。我不知道下一步该怎么做。

这是一个代码sn-p:

在 run_nerf_helpers.py 中:

def init_nerf_model(D=8, W=256, input_ch=3, input_ch_views=3, output_ch=4, skips=[4], use_viewdirs=False):

    relu = tf.keras.layers.ReLU()
    def dense(W, act=relu): return tf.keras.layers.Dense(W, activation=act)

    print('MODEL', input_ch, input_ch_views, type(
        input_ch), type(input_ch_views), use_viewdirs)
    input_ch = int(input_ch)
    input_ch_views = int(input_ch_views)

    inputs = tf.keras.Input(shape=(input_ch + input_ch_views))
    inputs_pts, inputs_views = tf.split(inputs, [input_ch, input_ch_views], -1)
    inputs_pts.set_shape([None, input_ch])
    inputs_views.set_shape([None, input_ch_views])

    print(inputs.shape, inputs_pts.shape, inputs_views.shape)
    outputs = inputs_pts
    for i in range(D):
        outputs = dense(W)(outputs)
        if i in skips:
            outputs = tf.concat([inputs_pts, outputs], -1)

在 run_nerf.py 中

def create_nerf(args):
    """Instantiate NeRF's MLP model."""

    embed_fn, input_ch = get_embedder(args.multires, args.i_embed)

    input_ch_views = 0
    embeddirs_fn = None
    if args.use_viewdirs:
        embeddirs_fn, input_ch_views = get_embedder(
            args.multires_views, args.i_embed)
    output_ch = 4
    skips = [4]
    model = init_nerf_model(
        D=args.netdepth, W=args.netwidth,
        input_ch=input_ch, output_ch=output_ch, skips=skips,
        input_ch_views=input_ch_views, use_viewdirs=args.use_viewdirs)
    grad_vars = model.trainable_variables
    models = {'model': model}

def create_nerf(args):
    """Instantiate NeRF's MLP model."""

    embed_fn, input_ch = get_embedder(args.multires, args.i_embed)

    input_ch_views = 0
    embeddirs_fn = None
    if args.use_viewdirs:
        embeddirs_fn, input_ch_views = get_embedder(
            args.multires_views, args.i_embed)
    output_ch = 4
    skips = [4]
    model = init_nerf_model(
        D=args.netdepth, W=args.netwidth,
        input_ch=input_ch, output_ch=output_ch, skips=skips,
        input_ch_views=input_ch_views, use_viewdirs=args.use_viewdirs)
    grad_vars = model.trainable_variables
    models = {'model': model}

错误:

('input_ch_views:', <type 'int'>)
('output_ch:', <type 'int'>)
('use_viewdirs:', <type 'bool'>)
('MODEL', 63, 27, <type 'int'>, <type 'int'>, True)

Traceback (most recent call last):
  File "run_nerf.py", line 938, in <module>
    train()
  File "run_nerf.py", line 682, in train
    args)
  File "run_nerf.py", line 397, in create_nerf
    input_ch_views=input_ch_views, use_viewdirs=args.use_viewdirs)
  File "/home/nerf-master/run_nerf_helpers.py", line 90, in init_nerf_model
    inputs = tf.keras.Input(shape=(input_ch + input_ch_views))
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/keras/engine/input_layer.py", line 231, in Input
    input_tensor=tensor)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/keras/engine/input_layer.py", line 91, in __init__
    batch_input_shape = (batch_size,) + tuple(input_shape)
TypeError: 'int' object is not iterable

我是新手。任何帮助将非常感激。谢谢你:)

【问题讨论】:

    标签: python tensorflow types neural-network training-data


    【解决方案1】:

    在科学库中,我们在算法方面做出了努力,而在类型检查方面则较少。所以传递的参数没有像在基础包中那样被检查,错误大部分时间在用户代码中,但它在库代码本身的深处崩溃,这使得它更难理解。

    因此,您必须跟踪错误所在的代码。您的代码的较低堆栈帧是:

    inputs = tf.keras.Input(shape=(input_ch + input_ch_views))
    

    Inputshape参数为:一个shape tuple(整数),不包括batch size。

    (input_ch + input_ch_views) 没有定义tuple。要定义一个内部只有一个元素的元组,您需要添加一个尾随,

    inputs = tf.keras.Input(shape=(input_ch + input_ch_views,))
    

    参考:How to create a tuple with only one element

    【讨论】:

      猜你喜欢
      • 2011-06-12
      • 2019-09-15
      • 2011-04-07
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 2012-08-30
      相关资源
      最近更新 更多