【问题标题】:multiple input does not work on Tensorflow 2 installation on MAC OS M1 - AttributeError: 'tuple' object has no attribute 'shape'多个输入不适用于 MAC OS M1 上的 Tensorflow 2 安装 - AttributeError: 'tuple' object has no attribute 'shape'
【发布时间】:2021-05-09 19:00:54
【问题描述】:

我有一个 Tensorflow(序列)模型,该模型采用 2 个输入流。这是定义模型的代码部分:

generic_in  = Input(shape=(sequence_length, nr_features), name='generic_input')
input1_in     = Input(shape=(sequence_length, nr_features), name='input1_input')
input2_in = Input(shape=(sequence_length, nr_features), name='input2_input')

generic_out, generic_state_h, generic_state_c =      LSTM(50,
                                                          return_sequences = False,
                                                          return_state = True,
                                                          dropout = 0.15,
                                                          recurrent_dropout = 0.15,
                                                          name="generic_lstm")(generic_in)

concatenated_gen_out = Concatenate()([ generic_state_h, generic_state_c ])

gen_dense_out = Dense(100,
                      activation='relu',
                      name="generic_dense")(concatenated_gen_out)

gen_dense_out = BatchNormalization()(gen_dense_out)
gen_dense_out = Dropout(0.15)(gen_dense_out)

generic_model = Model( inputs  = [ generic_in ], outputs = [ gen_dense_out ] )

input1_dense_out     = generic_model(input1_in)
input2_dense_out = generic_model(input2_in)

concatenated_out      = Concatenate()([ input1_dense_out, input2_dense_out ])

dense2_out = Dense(100,
                   activation='relu',
                   name="dense_2")(concatenated_out)

dense2_out = BatchNormalization()(dense2_out)
dense2_out = Dropout(0.2)(dense2_out)

softmax_out = Dense(nr_classes, 
                    activation='softmax',
                    name="final_output_layer")(dense2_out)

model = Model(inputs  = [ input1_in,    input2_in ],
              outputs = [ softmax_out             ])

#opt = tf.keras.optimizers.Adam(lr=0.00008, decay=0.000001)
opt =  tf.keras.optimizers.Adam(lr=0.0001)

model.compile(loss='categorical_crossentropy', 
              optimizer=opt, 
              metrics=['accuracy'])


history = model.fit(x=train_x,
                    y=train_y,
                    batch_size=BATCH_SIZE,
                    epochs=80,
                    verbose=2,
                    validation_data=(dev_x, dev_y),
                    shuffle=True) 

请注意train_x 是model.fit 方法的输入,它是一个包含model = Model(inputs = [input1_in, input2_in], outputs = [softmax_out]) 中定义的2 个输入的列表。

这在我在Windows 上的Tensorflow v1.13.1 安装中运行良好。我正在尝试将我的项目迁移到MAC OS Big Sur v11.3.1 with M1 chip。 MAC OS 上的 Tensorflow 版本是2.4.0-rc0。

我显然做了一些更改以使其适用于 Tensorflow 2,但这些更改主要是基于新 API 的 API 调用更新。

我在 MAC Tensorflow 安装时遇到的错误:

Traceback (most recent call last):
      File "/Users/me/Developer/AI_Projects/Football/M1_FULL_TIME_MR/src/train_fit_v2.py", line 288, in <module>
        history = model.fit(x=train_x,
      File "/Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 1100, in fit
        tmp_logs = self.train_function(iterator)
      File "/Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 828, in __call__
        result = self._call(*args, **kwds)
      File "/Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 871, in _call
        self._initialize(args, kwds, add_initializers_to=initializers)
      File "/Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 725, in _initialize
        self._stateful_fn._get_concrete_function_internal_garbage_collected(  # pylint: disable=protected-access
      File "/Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 2969, in _get_concrete_function_internal_garbage_collected
        graph_function, _ = self._maybe_define_function(args, kwargs)
      File "/Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 3361, in _maybe_define_function
        graph_function = self._create_graph_function(args, kwargs)
      File "/Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 3196, in _create_graph_function
        func_graph_module.func_graph_from_py_func(
      File "/Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/framework/func_graph.py", line 990, in func_graph_from_py_func
        func_outputs = python_func(*func_args, **func_kwargs)
      File "/Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 634, in wrapped_fn
        out = weak_wrapped_fn().__wrapped__(*args, **kwds)
      File "/Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/framework/func_graph.py", line 977, in wrapper
        raise e.ag_error_metadata.to_exception(e)
    AttributeError: in user code:
    
        /Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:805 train_function  *
            return step_function(self, iterator)
        /Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:795 step_function  **
            outputs = model.distribute_strategy.run(run_step, args=(data,))
        /Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:1259 run
            return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
        /Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:2730 call_for_each_replica
            return self._call_for_each_replica(fn, args, kwargs)
        /Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:3417 _call_for_each_replica
            return fn(*args, **kwargs)
        /Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:788 run_step  **
            outputs = model.train_step(data)
        /Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:758 train_step
            self.compiled_metrics.update_state(y, y_pred, sample_weight)
        /Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/keras/engine/compile_utils.py:387 update_state
            self.build(y_pred, y_true)
        /Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/keras/engine/compile_utils.py:317 build
            self._metrics = nest.map_structure_up_to(y_pred, self._get_metric_objects,
        /Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/util/nest.py:1159 map_structure_up_to
            return map_structure_with_tuple_paths_up_to(
        /Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/util/nest.py:1257 map_structure_with_tuple_paths_up_to
            results = [
        /Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/util/nest.py:1258 <listcomp>
            func(*args, **kwargs) for args in zip(flat_path_gen, *flat_value_gen)
        /Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/util/nest.py:1161 <lambda>
            lambda _, *values: func(*values),  # Discards the path arg.
        /Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/keras/engine/compile_utils.py:418 _get_metric_objects
            return [self._get_metric_object(m, y_t, y_p) for m in metrics]
        /Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/keras/engine/compile_utils.py:418 <listcomp>
            return [self._get_metric_object(m, y_t, y_p) for m in metrics]
        /Users/me/miniforge3/envs/tf_dev/lib/python3.8/site-packages/tensorflow/python/keras/engine/compile_utils.py:439 _get_metric_object
            y_t_rank = len(y_t.shape.as_list())
    
        AttributeError: 'tuple' object has no attribute 'shape'

我完全没有解决方案。我该怎么做才能让它发挥作用?

【问题讨论】:

    标签: macos tensorflow keras tensorflow2.0 tf.keras


    【解决方案1】:

    根据您发布的错误y_t 是元组类型。元组具有属性形状。 您可以尝试投射y_t。

    numpy.array(y_t)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-18
      • 2020-05-30
      • 2017-05-10
      • 2022-11-13
      • 1970-01-01
      • 2018-03-12
      • 1970-01-01
      • 2020-07-09
      相关资源
      最近更新 更多