我正在尝试训练一个可以检测的 CNN。因此,我在名为“allImages”的文件夹中有图像。我将相应图像的信息存储在一个 csv 文件中。为了处理大量数据,我使用了 flow_from_dataframe 函数。
首先,我已经初始化了 flow_from_DataFrame 方法
traindf=pd.read_csv("face_features.csv",)
columns = ['LTX','LTY','LBX','LBY','RBX','RBY','RTX','RTY','TLLX','TLLY','TLRX','TLRY','BottomX','BottomY','TRLX','TRLY','TRRX','TRRY']
datagen=ImageDataGenerator(rescale=1./255.,validation_split=0.25)
train_generator=datagen.flow_from_dataframe(
dataframe=traindf,
directory="allImages/",
x_col='StringName',
y_col=columns,
subset="training",
batch_size=32,
seed=42,
class_mode = "input",
shuffle=True,
target_size=(158,163))
然后,我正在尝试构建和拟合模型。
model_layers = [
tf.keras.layers.Conv2D( 158 , input_shape=(32, 158,163,3) , kernel_size=( 3 , 3 ), activation='relu' ),
tf.keras.layers.Conv2D( 158 , kernel_size=( 3 , 3 ) , strides=2 , activation='relu' ),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Conv2D( 18 , kernel_size=( 3 , 3 ) , strides=1 , activation='relu' ),
tf.keras.layers.Conv2D( 18 , kernel_size=( 3 , 3 ) , strides=1 , activation='relu' ),
tf.keras.layers.Conv2D( 18 , kernel_size=( 3 , 3 ) , strides=1 ),
]
model = tf.keras.Sequential(model_layers)
model.compile( loss=tf.keras.losses.mean_squared_error , optimizer=tf.keras.optimizers.Adam( lr=0.0001 ) , metrics=[ 'mse' ] )
model.fit_generator(generator=train_generator,
steps_per_epoch=20,
epochs=20)
但不幸的是,keras 抛出了输入错误。
WARNING:tensorflow:Model was constructed with shape (None, 32, 158, 163,
3) for input Tensor("conv2d_92_input:0", shape=(None, 32, 158, 163, 3),
dtype=float32), but it was called on an input with incompatible shape (None, None, None, None).
当我尝试获取 train_generator 的 x 形状时。我收到 (32, 158, 163, 3)。
有人可以帮忙解决这个问题吗?
珍惜你的时间。
答案 0 :(得分:1)
不需要在模型第一层的input_shape中提到batch size维度:
替换 -> tf.keras.layers.Conv2D( 158 , input_shape=(32, 158,163,3), kernel_size=( 3 , 3 ), activation='relu' )
与 -> tf.keras.layers.Conv2D( 158, kernel_size=( 3 , 3 ), activation='relu', input_shape=(158,163,3))
进一步阅读: 您可以查找 Shapes in Keras。