[英]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.