簡體   English   中英

Tensorflow & Keras 層“順序”需要 1 個輸入,但它接收到 2 個輸入張量

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM