tensorflow - 层密集需要 1 个输入,但它收到 2 个输入张量,我该如何更改它

标签 tensorflow python keras

所以我是一个初学者,刚接触 tensorflow2 和 keras,当我偶然发现以下错误时,我只是在玩弄并尝试制作一些模型:

Traceback (most recent call last):
  File "/home/arch_poppin/dev/AI/reviews/rev.py", line 7, in <module>
    x = layers.Dense(8, activation='relu')([input1, input2])
  File "/usr/lib/python3.8/site-packages/tensorflow/python/keras/engine/base_layer.py", line 930, in __call__
    return self._functional_construction_call(inputs, args, kwargs,
  File "/usr/lib/python3.8/site-packages/tensorflow/python/keras/engine/base_layer.py", line 1068, in _functional_construction_call
    outputs = self._keras_tensor_symbolic_call(
  File "/usr/lib/python3.8/site-packages/tensorflow/python/keras/engine/base_layer.py", line 801, in _keras_tensor_symbolic_call
    return self._infer_output_signature(inputs, args, kwargs, input_masks)
  File "/usr/lib/python3.8/site-packages/tensorflow/python/keras/engine/base_layer.py", line 841, in _infer_output_signature
    self._maybe_build(inputs)
  File "/usr/lib/python3.8/site-packages/tensorflow/python/keras/engine/base_layer.py", line 2647, in _maybe_build
    input_spec.assert_input_compatibility(
  File "/usr/lib/python3.8/site-packages/tensorflow/python/keras/engine/input_spec.py", line 204, in assert_input_compatibility
    raise ValueError('Layer ' + layer_name + ' expects ' +
ValueError: Layer dense expects 1 input(s), but it received 2 input tensors. Inputs received: [<tf.Tensor 'Placeholder:0' shape=(None,) dtype=float32>, <tf.Tensor 'Placeholder_1:0' shape=(None,) dtype=float32>].
如何让我的密集层接受前两个层的输出作为输入?我的代码
如下:
X1 = tf.constant([2, 3, 4, 5, 6, 7])
X2 = tf.constant([2, 3, 4, 5, 6, 7])
yTrain = tf.constant([4, 6, 8, 10, 12, 14])

input1 = keras.Input(shape=(X1.shape[1:]))
input2 = keras.Input(shape=(X2.shape[1:]))
x = layers.Dense(8, activation='relu')([input1, input2])
outputs = layers.Dense(2)(x)
mlp = keras.Model(input1, input2, outputs)

mlp.compile(loss='mean_squared_error',
            optimizer='adam', metrics=['accuracy'])

mlp.fit(X1, X2, yTrain, batch_size=1, epochs=10, validation_split=0.2,
        shuffle=True)

mlp.evaluate(X1, X2, yTrain)
```

最佳答案

您必须使用 concatenate层以提供多个输入。建议阅读本教程 - Models with multiple inputs and outputs .还要注意我是如何在 mlp.fit 中传递输入的和 mlp.evaluate .
你必须像下面这样修改你的代码 -

import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

X1 = tf.constant([2, 3, 4, 5, 6, 7])
X2 = tf.constant([2, 3, 4, 5, 6, 7])
yTrain = tf.constant([4, 6, 8, 10, 12, 14])

input1 = keras.Input(shape=(1,))
input2 = keras.Input(shape=(1,))

x = layers.concatenate([input1, input2])
x = layers.Dense(8, activation='relu')(x)
outputs = layers.Dense(2)(x)
mlp = keras.Model([input1, input2], outputs)

mlp.summary()

mlp.compile(loss='mean_squared_error',
            optimizer='adam', metrics=['accuracy'])

mlp.fit([X1, X2], yTrain, batch_size=1, epochs=10, validation_split=0.2,
        shuffle=True)

mlp.evaluate([X1, X2], yTrain)
输出 -
Model: "functional_5"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_16 (InputLayer)           [(None, 1)]          0                                            
__________________________________________________________________________________________________
input_17 (InputLayer)           [(None, 1)]          0                                            
__________________________________________________________________________________________________
concatenate_3 (Concatenate)     (None, 2)            0           input_16[0][0]                   
                                                                 input_17[0][0]                   
__________________________________________________________________________________________________
dense_8 (Dense)                 (None, 8)            24          concatenate_3[0][0]              
__________________________________________________________________________________________________
dense_9 (Dense)                 (None, 2)            18          dense_8[0][0]                    
==================================================================================================
Total params: 42
Trainable params: 42
Non-trainable params: 0
__________________________________________________________________________________________________
Epoch 1/10
4/4 [==============================] - 0s 32ms/step - loss: 36.3828 - accuracy: 0.0000e+00 - val_loss: 113.8439 - val_accuracy: 0.0000e+00
Epoch 2/10
4/4 [==============================] - 0s 5ms/step - loss: 35.9418 - accuracy: 0.0000e+00 - val_loss: 112.5230 - val_accuracy: 0.0000e+00
Epoch 3/10
4/4 [==============================] - 0s 5ms/step - loss: 35.4931 - accuracy: 0.0000e+00 - val_loss: 111.2055 - val_accuracy: 0.0000e+00
Epoch 4/10
4/4 [==============================] - 0s 5ms/step - loss: 35.1113 - accuracy: 0.0000e+00 - val_loss: 109.8443 - val_accuracy: 0.0000e+00
Epoch 5/10
4/4 [==============================] - 0s 6ms/step - loss: 34.6126 - accuracy: 0.0000e+00 - val_loss: 108.5272 - val_accuracy: 0.0000e+00
Epoch 6/10
4/4 [==============================] - 0s 5ms/step - loss: 34.1876 - accuracy: 0.0000e+00 - val_loss: 107.2023 - val_accuracy: 0.0000e+00
Epoch 7/10
4/4 [==============================] - 0s 6ms/step - loss: 33.7342 - accuracy: 0.0000e+00 - val_loss: 105.8807 - val_accuracy: 0.0000e+00
Epoch 8/10
4/4 [==============================] - 0s 6ms/step - loss: 33.2854 - accuracy: 0.0000e+00 - val_loss: 104.5553 - val_accuracy: 0.0000e+00
Epoch 9/10
4/4 [==============================] - 0s 6ms/step - loss: 32.8268 - accuracy: 0.0000e+00 - val_loss: 103.2337 - val_accuracy: 0.0000e+00
Epoch 10/10
4/4 [==============================] - 0s 6ms/step - loss: 32.3614 - accuracy: 0.0000e+00 - val_loss: 101.9115 - val_accuracy: 0.0000e+00
1/1 [==============================] - 0s 1ms/step - loss: 55.3572 - accuracy: 0.0000e+00
[55.35719299316406, 0.0]

关于tensorflow - 层密集需要 1 个输入,但它收到 2 个输入张量,我该如何更改它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63982116/

相关文章:

python - 我们可以用 Keras 做视频数据增强吗?

tensorflow - 如何在每个纪元后重置 tensorflow 中 GRU 的状态

python - Matplotlib:axvline 不定位在 .axis 上,而是定位在 ylim 上

python - qml 文件无法调用 pyd 文件的函数

object - Tensorflow 对象检测纵横比是高/宽还是宽/高?

tensorflow - 为什么我们需要 tf.convert_to_tensor?

python - 使用 Python 遍历文件时引用上一行

tensorflow - 自定义指标访问 X 输入数据

python - TypeError : Input 'filename' of 'ReadFile' Op has type float32 that does not match expected type of string

python - 没有名为 "data_utils"的模块...但已下载