【问题标题】:Tensorflow: Simple image image classifier not updating at all between epochsTensorflow:简单的图像图像分类器在时代之间根本不更新
【发布时间】:2020-06-10 23:47:47
【问题描述】:

我有一个非常简单的图像分类器,它最终将成为更大系统的一部分。它以 39 x 39 像素数据的 6 个通道作为输入,并将其分类为有效或无效(1.0 或 0.0)。

由于某些原因,我似乎无法确定第一个时期的准确度是所有时期的准确度。该模型似乎没有修改它的权重...

模型的代码如下。 imgdata 是一个 n * 39,39,6 的 numpy 数组,而 knownsso 是一个 n 1 或 0 个值的 numpy 数组。

      imgtrain,imgtest,nametrain,nametest,knowntrain,knowntest = 
            train_test_split(imgdata,names,knownsso,test_size=0.3, random_state=42)
      imgtrain=tf.cast(np.array(imgtrain),tf.float32)
      knowntrain=tf.cast(np.array(knowntrain),tf.float32)
      imgtest =tf.cast(np.array(imgtest ),tf.float32)
      knowntest =tf.cast(np.array(knowntest ),tf.float32)

      inputImg = tf.keras.Input(shape=(39,39,6))
      x = tf.keras.layers.Conv2D(32,(3,3), activation='relu')(inputImg)
      x = tf.keras.layers.MaxPooling2D((2,2))(x)
      x = tf.keras.layers.Flatten()(x)
      x = tf.keras.layers.Dense(32, activation=tf.nn.relu)(x)
      x = tf.keras.layers.Dense(2, activation=tf.nn.softmax)(x)

      model = tf.keras.Model(inputs=inputImg,outputs=x)
      model.compile(optimizer = tf.optimizers.Adam(),
                loss = 'sparse_categorical_crossentropy',
                metrics=['accuracy'])

      history = model.fit(imgtrain,knowntrain,epochs=5,validation_data=(imgtest,knowntest))

      print(history.history)

我稍微简化了模型,使其对人眼更加友好,但其行为与额外 dropout、dense、maxpool 和 conv2d 层的加减一致。我也尝试过更改学习率,但结果仍然完全相同。

我尝试运行的每个版本都会生成相同的历史记录,但在不同时期的准确性都不会改变:

    {'loss': [nan, nan, nan, nan, nan], 'accuracy': [0.75873935, 0.75873935, 0.75873935, 0.75873935, 0.75873935], 'val_loss': [nan, nan, nan, nan, nan], 'val_accuracy': [0.77059567, 0.77059567, 0.77059567, 0.77059567, 0.77059567]}

我可以说任何问题都非常简单,但我不知道应该尝试什么来解决这个问题。

【问题讨论】:

  • 我不认为这应该是问题,但是如果您使用sparse_categorical_crossentropy,您的标签(known* 值)不应该是整数吗?同样,相应的指标应该是sparse_categorical_accuracy,尽管我不确定 Keras 是否能够自动检测到它应该使用该指标作为accuracy 给定数据的形状。
  • 这可能与您的 imgdata 有关。检查范围,您是否应用了标准化?数据中有nan吗?我无法重现您的代码 + 虚拟数据的任何问题。
  • @ZabirAlNazi 我只是尝试添加归一化层,没有任何变化。有没有什么地方可以读到关于如何最好地规范化我的数据以获得 CNN 的良好行为?
  • @jdehesa 我将它们切换到 int8 并更改了准确度指标。没有变化。感谢您的想法。

标签: python tensorflow keras


【解决方案1】:

这可能是一个菜鸟问题,但规范化我的输入图像似乎有所帮助。

我现在的问题是过度拟合/性能不佳,而不是它什么也没做。

【讨论】:

    猜你喜欢
    • 2017-03-04
    • 2016-09-23
    • 2019-02-02
    • 2017-01-09
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    相关资源
    最近更新 更多