TypeError: 'int' object is not iterable while training a neural network
TypeError: 'int' object is not iterable while training a neural network
我正在尝试训练 NeRF (https://github.com/bmild/nerf),下面是我遇到的错误。我试图打印变量的数据类型。不知道下一步怎么办。
这是一个代码片段:
在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
我是新手。任何帮助将非常感激。谢谢:)
在科学图书馆中,努力在算法上,而不是在类型检查上。所以传递的参数不像在基础包中那样检查,错误大部分时间在用户代码中,但它在库代码本身的深处崩溃,这使得它更难理解。
所以你必须跟踪回溯到错误所在的代码。您的代码的下层堆栈框架是:
inputs = tf.keras.Input(shape=(input_ch + input_ch_views))
Input
形状参数是:一个形状元组(整数),不包括批量大小。
(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
我正在尝试训练 NeRF (https://github.com/bmild/nerf),下面是我遇到的错误。我试图打印变量的数据类型。不知道下一步怎么办。
这是一个代码片段:
在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
我是新手。任何帮助将非常感激。谢谢:)
在科学图书馆中,努力在算法上,而不是在类型检查上。所以传递的参数不像在基础包中那样检查,错误大部分时间在用户代码中,但它在库代码本身的深处崩溃,这使得它更难理解。
所以你必须跟踪回溯到错误所在的代码。您的代码的下层堆栈框架是:
inputs = tf.keras.Input(shape=(input_ch + input_ch_views))
Input
形状参数是:一个形状元组(整数),不包括批量大小。
(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