![](/img/trans.png)
[英]ValueError: Layer sequential expects 1 input(s), but it received 239 input tensors
[英]Tensorflow & Keras Layer "sequential" expects 1 input(s), but it received 2 input tensors
我在尝试使用 Keras 创建 model 时遇到问题,如果我尝试运行它,它会抱怨顺序层输入太多。 这是错误:
ValueError: Layer "sequential" expects 1 input(s), but it received 2 input tensors.
Inputs received: [<tf.Tensor 'IteratorGetNext:0' shape=(1, 90, 60, 3) dtype=uint8>,
<tf.Tensor 'IteratorGetNext:1' shape=(1,) dtype=int32>]
我的输入是几个 60x90 像素(宽 x 高)的 RGB 图像。 这是我的 model:
network = models.Sequential()
network.add(layers.Conv2D(32, (3,3), activation = 'relu', input_shape = (90, 60, 3), name="conv_1"))
network.add(layers.MaxPooling2D((2,2), name="maxpool_1"))
network.add(layers.Conv2D(64, (3,3), activation = 'relu', name="conv_2"))
network.add(layers.MaxPooling2D((2,2), name = "maxpool_2"))
network.add(layers.Conv2D(128, (3,3), activation = 'relu', name="conv_3"))
network.add(layers.MaxPooling2D((2,2), name = "maxpool_3"))
network.add(layers.Conv2D(128, (3,3), activation = 'relu', name="conv_4"))
network.add(layers.MaxPooling2D((2,2), name = "maxpool_4"))
network.add(layers.Flatten())
network.add(layers.Dropout(0.2))
network.add(layers.Dense(512, activation = 'relu', name="dense_1"))
network.add(layers.Dense(6, activation = 'sigmoid', name="dense_2"))
这个 model 的目标是告诉图像中某物的位置,将图像分成 6 个部分,因此下面代码中的 _px 代表图像的像素数据,_loc 代表提供的图像的正确答案.
training_data_px = dataset_px[:training_images]
test_data_px = dataset_px[training_images:]
training_data_loc = dataset_loc[:training_images]
test_data_loc = dataset_loc[training_images:]
training_data = (numpy.asarray(training_data_px), numpy.asarray(training_data_loc))
test_data = (numpy.asarray(test_data_px), numpy.asarray(test_data_loc))
这是training_data[0]
和training_data[1]
的形状:
(30, 90, 60, 3)
(30,)
这是网络的编译和适配function:
network.compile(optimizer = optimizers.Adam(learning_rate=1e-4),
loss = 'categorical_crossentropy',
metrics = ['accuracy'])
history = network.fit(training_data,
steps_per_epoch = 50,
epochs=50,
validation_data = test_data,
validation_steps=50
)
错误是什么意思以及如何解决?
这里的问题是您如何将参数传递给fit
方法,特别是在您的情况下正确的方法是:
history = network.fit(
training_data[0],
training_data[1],
steps_per_epoch = 50,
epochs=50,
validation_data = test_data,
validation_steps=50
)
换句话说,前2个参数通常是x
(输入,第一个)和y
(目标,第二个),但是如果没有目标,则可以省略第二个(参见例如siamese NN)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.