1 回答
TA贡献1829条经验 获得超13个赞
您的问题来自最后一层的大小(为避免这些错误,始终希望对N_IMAGES、WIDTH、HEIGHT和使用 python 常量):N_CHANNELSN_CLASSES
用于图像分类
您应该为每张图片分配一个标签。尝试切换labels:
import tensorflow as tf
import numpy as np
from sklearn.model_selection import train_test_split
np.random.seed(4213)
N_IMAGES, WIDTH, HEIGHT, N_CHANNELS = (500, 160, 160, 10)
N_CLASSES = 5
data = np.random.randint(low=1,high=29, size=(N_IMAGES, WIDTH, HEIGHT, N_CHANNELS))
labels = np.random.randint(low=0,high=N_CLASSES, size=(N_IMAGES))
#...
用于语义分割
确保您的分类器(网络的最后一层)大小相应。在这种情况下,每个像素需要 1 个类别:
#...
model = tf.keras.Sequential()
model.add(arch)
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(width * height))
model.add(tf.keras.layers.Reshape([width , height]))
#...
这是您可以获得的最简单的方法。相反,您可以设置多个反卷积层作为分类器,或者您甚至可以翻转架构arch并使用它来生成分类结果。正交地,您可以one_hot对标签执行编码,从而将它们扩展一个因子N_CLASSES,有效地乘以最后一层中的神经元数量。
添加回答
举报