我已经阅读了相关的讨论帖,但无法解决我的问题。
我目前正在尝试运行我的模型,以便对5000个不同的事件进行分类,这些事件目前都属于同一类别(所以我的“标签”数据集包含5000个1)。
我对我的标签数据集使用了一键编码:
labels = np.loadtxt("/content/drive/My Drive/5000labels1.csv")from keras.utils import to_categoricallabels=to_categorical(labels) # 将标签转换为独热编码
然后我这样定义我的模型:
inputs = keras.Input(shape=(29,29,1))x=inputsx = keras.layers.Conv2D(16, kernel_size=(3,3), name='Conv_1')(x)x = keras.layers.LeakyReLU(0.1)(x) x = keras.layers.MaxPool2D((2,2), name='MaxPool_1')(x)x = keras.layers.Conv2D(16, kernel_size=(3,3), name='Conv_2')(x)x = keras.layers.LeakyReLU(0.1)(x)x = keras.layers.MaxPool2D((2,2), name='MaxPool_2')(x)x = keras.layers.Conv2D(32, kernel_size=(3,3), name='Conv_3')(x)x = keras.layers.LeakyReLU(0.1)(x)x = keras.layers.MaxPool2D((2,2), name='MaxPool_3')(x)x = keras.layers.Flatten(name='Flatten')(x)x = keras.layers.Dense(64, name='Dense_1')(x)x = keras.layers.ReLU(name='ReLU_dense_1')(x)x = keras.layers.Dense(64, name='Dense_2')(x)x = keras.layers.ReLU(name='ReLU_dense_2')(x)outputs = keras.layers.Dense(4, activation='softmax', name='Output')(x)model = keras.Model(inputs=inputs, outputs=outputs, name='VGGlike_CNN')model.summary()keras.utils.plot_model(model, show_shapes=True)OPTIMIZER = tf.keras.optimizers.Adam(learning_rate=LR_ST)model.compile(optimizer=OPTIMIZER, loss='categorical_crossentropy', metrics=['accuracy'], run_eagerly=False)def lr_decay(epoch): if epoch < 10: return LR_ST else: return LR_ST * tf.math.exp(0.2 * (10 - epoch))lr_scheduler = keras.callbacks.LearningRateScheduler(lr_decay)model_checkpoint = keras.callbacks.ModelCheckpoint( filepath='mycnn_best', monitor='val_accuracy', save_weights_only=True, save_best_only=True, save_freq='epoch')callbacks = [ lr_scheduler, model_checkpoint ] print('X_train.shape = ',X_train.shape)history = model.fit(X_train, epochs=50, validation_data=X_test, shuffle=True, verbose=1, callbacks=callbacks)
我得到的错误是:“没有为任何变量提供梯度:[‘Conv_1_2/kernel:0’, ‘Conv_1_2/bias:0’, ‘Conv_2_2/kernel:0’, ‘Conv_2_2/bias:0’, ‘Conv_3_2/kernel:0’, ‘Conv_3_2/bias:0’, ‘Dense_1_2/kernel:0’, ‘Dense_1_2/bias:0’, ‘Dense_2_2/kernel:0’, ‘Dense_2_2/bias:0’, ‘Output_2/kernel:0’, ‘Output_2/bias:0’]。”
根据我所阅读的资料,似乎最可能的原因是损失函数的问题 – 但我不明白问题出在哪里。最终,我希望网络能够将事件分类到四个类别中的一个,所以我使用了分类交叉熵,以便为每个事件数量的值关联一个概率。
谁能帮帮我?如果需要,我可以提供我原始代码的Google Colab文件链接。
提前感谢!
回答:
你遗漏了目标
model.fit(X_train, y_train, ..., validation_data = (X_test, y_test))