【问题标题】:Fix ValueError and Warning on Tensorflow Conv-Neural-Network修复 Tensorflow Conv-Neural-Network 上的 ValueError 和 Warning
【发布时间】:2021-05-17 02:51:52
【问题描述】:

我正在使用 Tensorflow 创建一个 CNN 模型,该模型将尺寸为 124,129 的图像分为 8 个类别。

我需要帮助来了解我收到错误的原因:ValueError: 'images' must have either 3 or 4 dimensions.

我也收到警告

WARNING:tensorflow:Model was constructed with shape (1, 124, 129, 8) for input KerasTensor(type_spec=TensorSpec(shape=(1, 124, 129, 8), dtype=tf.float32, name='input_36'), name='input_36', description="created by layer 'input_36'"), but it was called on an input with incompatible shape (None, 129).

在我尝试将模型拟合到训练集时出现错误。

这是模型的代码:

from tensorflow.keras import layers
from tensorflow.keras import models

for spectrogram, _ in training_spect_data.take(1):
  input_shape = spectrogram.shape

print(input_shape)
print(len(commands))

model = models.Sequential([
    layers.Input((124,129,8), batch_size= 1),
    layers.experimental.preprocessing.Resizing(32, 32), 
    layers.Conv2D(32, 3, activation='relu'),
    layers.Conv2D(64, 3, activation='relu'),
    layers.MaxPooling2D(),
    layers.Flatten(),
    layers.Dense(128, activation='relu'),
    layers.Dense(num_labels),
])

model.summary()
model.compile(
    optimizer=tf.keras.optimizers.Adam(),
    loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    metrics=['accuracy'],
)

model.fit(
    training_spect_data, 
    validation_data=validation_spect_data,  
    epochs=10,
  callbacks=tf.keras.callbacks.EarlyStopping(verbose=1, patience=2),
)

如果有帮助,这就是训练/测试/验证集中的数据点之一的样子:

tf.Tensor(
[[4.22809680e-04 1.20909873e-03 1.30543171e-03 ... 1.11539455e-04
  7.03251426e-05 5.72346325e-05]
 [1.37844472e-06 5.68726333e-04 1.01903011e-03 ... 1.72739034e-04
  7.02477628e-05 2.15965847e-05]
 [1.90013321e-04 5.55736362e-04 7.45545258e-04 ... 1.08729822e-04
  1.73325971e-04 1.51859131e-04]
 ...
 [1.93573331e-04 5.46126859e-04 1.61838590e-03 ... 1.15362825e-04
  1.83291835e-04 2.17455061e-04]
 [1.49126354e-04 7.04471953e-04 1.06320635e-03 ... 8.47642514e-05
  3.19860228e-05 1.25371589e-05]
 [1.29039981e-05 2.79012456e-04 5.54071739e-04 ... 3.47834612e-05
  7.82721399e-05 7.47569429e-05]], shape=(124, 129), dtype=float32) tf.Tensor(b'yes', shape=(), dtype=string)

非常感谢您对解决上述错误/警告的任何帮助。

【问题讨论】:

    标签: python tensorflow keras deep-learning conv-neural-network


    【解决方案1】:

    你有密码

     layers.Input((124,129,8), batch_size= 1)
    

    我认为应该是的

     layers.Input((124,129), batch_size= 1)
    

    8 是与输入形状无关的类数。其实我也会留下 batch_size 参数所以使用

     layers.Input((124,129))
    

    model.fit 将默认批量大小设置为 32。您还拥有模型中的最后一层

    layers.Dense(num_labels),
    

    我觉得最好用

    layers.Dense(num_label, activation='softmax')
    

    然后改变损失

    loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
    

    loss=tf.keras.losses.SparseCategoricalCrossentropy
    

    如果您使用的是 SparseCategoricalCrossentropy,请确保您的标签是整数

    【讨论】:

      猜你喜欢
      • 2021-06-01
      • 1970-01-01
      • 2022-12-21
      • 1970-01-01
      • 2019-09-29
      • 2021-06-25
      • 2019-08-22
      • 1970-01-01
      相关资源
      最近更新 更多