A. *_*lla 5 python keras tensorflow
我对 Keras 比较陌生,正在尝试使用 TensorFlow 后端实现 U-Net 架构,以便对许多 256x256 图像进行像素级多类分类。输入形状和输出形状均为 256x256x1(批量大小也是 1)。
我有超过 30 个类,所以我尝试将其用作sparse_categorical_crossentropy我的损失函数(常规分类交叉熵会给我带来记忆错误),正如许多在线论坛建议的那样。当我将“metric”参数从“accuracy”更改为“sparse_categorical_accuracy”时,出现以下错误:
InvalidArgumentError: Incompatible shapes: [65536] vs. [1,256,256]
[[{{node metrics_3/sparse_categorical_accuracy/Equal}} =
Equal[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:GPU:0"](metrics_3/sparse_categorical_accuracy/Reshape, metrics_3/sparse_categorical_accuracy/Cast)]]
[[{{node metrics_3/sparse_categorical_accuracy/Mean/_749}} =
_Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_3000_metrics_3/sparse_categorical_accuracy/Mean", tensor_type=DT_FLOAT,
_device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]
Run Code Online (Sandbox Code Playgroud)
看来我的输出是 1D 而不是 2D?我需要更改数据格式吗?然而,当我尝试在 U-Net 末尾使用扁平层和密集层(以产生 65536 个向量输出)来展平输出时,我收到另一个错误,指出预期输出维度为 1。我也尝试过将最后一层中的通道数更改为我正在使用的类总数(以使输出为 256x256xnum_classes),但我得到了相同的错误。
此外,当我将“metric”参数保留为“accuracy”时,代码会运行,但损失始终存在,NaN并且精度很快收敛到约 0.008。在这种情况下,“准确度”默认为多少?
这些是已知的问题吗sparse_categorical_accuracy?我在网上找不到太多信息,关于这个特定损失函数的 Keras 文档也很少。任何帮助表示赞赏!如果还需要我的代码的其他部分来帮助调试,请告诉我。