首先,我使用100个类,每个类使用150个视频,我划分出80%是训练集,20%是验证集。
下面是我的代码
def generator(filePath,labelList):
tmp = [[x,y] for x, y in zip(filePath, labelList)]
np.random.shuffle(tmp)
Files = [n[0] for n in tmp]
Labels = [n[1] for n in tmp]
for File,Label in zip(Files,Labels):
File = np.load(File)
#x = tf.squeeze(File,1)
#x = tf.squeeze(x,2)
#PoolingOutput = tf.keras.layers.AveragePooling1D()(x)
#PoolingOutput = tf.squeeze(PoolingOutput)
#x = tf.squeeze(PoolingOutput)
#---------------------------------------------------------
x = tf.squeeze(File)
transformed_label = encoder.transform([Label])
yield x, transformed_label[0]
train_dataset = tf.data.Dataset.from_generator( generator, args = (TrainFilePath,TrainLabelList), output_types=(tf.float64, tf.int16), output_shapes=((20, 2048),len(EncoderOnlyList)))
train_dataset = train_dataset.batch(8).prefetch(tf.data.experimental.AUTOTUNE)
#train_dataset = train_dataset.batch(16)
valid_dataset = tf.data.Dataset.from_generator( generator, args = (ValiFilePath, VailLabelPath), output_types=(tf.float64, tf.int16), output_shapes=((20, 2048),len(EncoderOnlyList)))
valid_dataset = valid_dataset.batch(8).prefetch(tf.data.experimental.AUTOTUNE)
#valid_dataset = valid_dataset.batch(16)
with tf.device(device_name):
model = Sequential()
model.add(keras.layers.Input(shape=(20, 2048),))
model.add(tf.keras.layers.Masking(mask_value=0.))
model.add(tf.keras.layers.LSTM(256)
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(128,activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(100, activation='softmax'))
model.compile(optimizer=rmsprop,
loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit(train_dataset, epochs=20, validation_data=valid_dataset)
model.save_weights('/content/drive/MyDrive/Resnet50BaseWeight_3.h5', overwrite=True)
model.save("/content/drive/MyDrive/Resnet50Base_3.h5")
结果是这样
时间点1/20 1500/1500 [==================================================] -97秒61毫秒/步-损耗:0.0000e+00 -精度:0.0012 -瓦尔_损失:0.0000e+00 -瓦尔_精度:0.0000e+00时元2/20 1500/1500 [==========================================================] -102秒68毫秒/阶跃-损耗:0.0000e+00 -精度:0.0086 -瓦尔_损失:0.0000e+00 -瓦尔_精度:0.0000e+00时元3/20 1500/1500 [=======================================================================] -91秒60毫秒/阶跃-损耗:0.0000e+00 -精度:0.0103 -瓦尔_损失:0.0000e+00 -瓦尔_精度:0.0000e+00时元4/20 1500/1500 [=========================================================] -95秒63毫秒/阶跃-损耗:0.0000e+00 -精度:0.0113 -瓦尔损失:0.0000e+00 -瓦尔_精度:0.0000e+00时元5/20 1500/1500 [===========================================================] -93秒62毫秒/阶跃-损耗:0.0000e+00 -精度:0.0103 -瓦尔_损失:0.0000e+00 -瓦尔_精度:0.0000e+00时元6/20 1500/1500 [==========================================================] -92秒61毫秒/阶跃-损耗:0.0000e+00 -精度:0.0098 -瓦尔_损失:0.0000e+00 -瓦尔_精度:0.0000电子+00
即使历元增加,精度也不会再增加
大多数结果显示为0.0000e+00
我不知道怎么了
请帮助
1条答案
按热度按时间iecba09b1#
它是logits形状和分类不匹配,你需要选择100个具有不同形状的目标类,并将其形成为(100,0)或等价物。
样本:相同的输入类型的期望或其中比较,损失函数和统计矩阵计算从估计和评估的步骤相同的输入或不同的输入。RMS可以使用任何仍然正确,但你需要使估计量的范围。
输出:比较100个类不是问题,更新新的或没有相同的输入应选择收藏夹类。
输出:图像已分类,类型数量不是影响太多,而是它们的一致程度,等待CIFAR100训练时...