【问题标题】:ValueError: Input 0 of layer sequential_2 is incompatible with the layerValueError: 层序的输入 0 与层不兼容
【发布时间】:2021-07-04 07:31:50
【问题描述】:

我有以下代码:

import tensorflow as tf
import keras
from keras.datasets import cifar10

(x_train, y_train), (x_test, y_test) = cifar10.load_data()

import numpy as np

x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], x_train.shape[2], 3))
print(x_train.shape)
x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], x_test.shape[2], 3))
print(x_test.shape)

x_train = x_train.astype('float32')/255.0
x_test  = x_test.astype('float32')/255.0

from keras.utils import to_categorical
y_train = to_categorical(y_train, num_classes = 10)
y_test = to_categorical(y_test, num_classes = 10)

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten

model = Sequential()
#Defining layers of the model
model.add(Dense(2056, activation='relu', input_shape = (3072,)))
model.add(Dense(10, activation='softmax')) 

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

history = model.fit(x_train, y_train, batch_size=1000, epochs=50)

我面临以下错误:

ValueError: 层序号_2 的输入 0 与层不兼容:输入形状的预期轴 -1 具有值 3072,但接收到形状为 (1000, 32, 32, 3) 的输入

我只想将 input_shape 保持为 3072。我该如何重塑我的 y_test 来解决这个问题?

【问题讨论】:

    标签: python numpy tensorflow keras deep-learning


    【解决方案1】:

    您应该先Flatten 输入数据,然后再将它们传递给Dense 层。

    model = Sequential()
    #Defining layers of the model
    model.add(Flatten(input_shape=(32,32,3)) # 32*32*3 = 3072
    model.add(Dense(2056, activation='relu'))
    model.add(Dense(10, activation='softmax')) 
    

    这应该可以解决问题。

    【讨论】:

    • 谢谢 :) 我尝试在第一个密集层之后使用 flatten。但这绝对有效。
    猜你喜欢
    • 2021-05-31
    • 2020-11-28
    • 2021-09-13
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多