【发布时间】:2020-07-07 16:23:21
【问题描述】:
我是 Tensorflow 的新手,正在制作多类分类器。我的数据集有 6 个类别,图像为 150x150。 我收到关于 Logits 和 Labels 尺寸不匹配的错误,
我在 stackoverflow 上看到过其他此类问题,但我的问题似乎不是其中任何一个。
请任何人告诉我错误是什么,并在构建时告诉我不需要告诉输出层的批量大小(如果你看到 model.summary,它是 None,它稍后会自动知道),所以有什么事情会影响它.?
错误说:
logits and labels must be broadcastable: logits_size=[40,6] labels_size=[10,6]
模型定义如下:
batch_size = 10
epochs = 100
IMG_HEIGHT = 150
IMG_WIDTH = 150
IMG_CHANNEL = 3
classes = 6
inputs = Input(shape=(IMG_HEIGHT, IMG_WIDTH ,3))
conv1 = Conv2D(96, 11, strides=(4,4) , padding='valid', activation='relu')(inputs)
pool1 = MaxPooling2D(pool_size=(3, 3), strides=(2,2), padding='valid', data_format=None)(conv1)
a = tf.keras.layers.Lambda(tf.nn.local_response_normalization)
lrn1 = a(pool1)
conv2 = Conv2D(256, 5, padding='same', strides=(1,1) , activation='relu')(lrn1)
pool2 = MaxPooling2D(pool_size=(3, 3), strides=(2,2), padding='valid', data_format=None)(conv2)
b = tf.keras.layers.Lambda(tf.nn.local_response_normalization)
lrn2 = b(pool2)
conv3 = Conv2D(384, 3, padding='same', strides=(1,1), activation='relu')(lrn2)
conv4 = Conv2D(384, 3, padding='same', strides=(1,1), activation='relu')(conv3)
conv5 = Conv2D(256, 3, padding='same', strides=(1,1), activation='relu')(conv4)
conv6 = MaxPooling2D(pool_size=(3, 3), strides=(2,2), padding='valid', data_format=None)(conv5)
flat1 = Flatten()(conv6)
dense1 = Dense(4096, activation='relu')(flat1)
drop1 = Dropout(0.5)(dense1)
dense2 = Dense(4096, activation='relu')(drop1)
drop2 = Dropout(0.5)(dense2)
dense3 = Dense(classes,activation='softmax')(drop2)
model = Model(inputs=inputs, outputs=dense3, name="one")
opt = SGD(lr=0.1, momentum=0.1)
model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])
# Generator Declaration
train_image_generator = ImageDataGenerator(
rescale=1./255,
rotation_range=45,
width_shift_range=.15,
height_shift_range=.15,
horizontal_flip=True,
zoom_range=0.5
) # Generator for our training data
validation_image_generator = ImageDataGenerator(
rescale=1./255
) # Generator for our validation data
train_data_gen = train_image_generator.flow_from_directory(
batch_size=batch_size,
directory=train_dir,
shuffle=True,
class_mode='categorical',
target_size=(IMG_HEIGHT, IMG_WIDTH)
)
val_data_gen = validation_image_generator.flow_from_directory(
batch_size=batch_size,
directory=val_dir,
class_mode='categorical',
)
history = model.fit(
train_data_gen,
steps_per_epoch=3000//batch_size,
epochs=epochs, validation_data=val_data_gen,
validation_steps=3000//batch_size
)
【问题讨论】:
标签: python tensorflow machine-learning keras conv-neural-network