gpt4 book ai didi

python - ValueError : Error when checking target: expected dense_10 to have shape (1, )但得到了形状为(19316,)的数组

转载 作者:行者123 更新时间:2023-12-01 07:33:17 26 4
gpt4 key购买 nike

我正在运行一个 CNN,它检查图像但不分类。事实上,输出层是一个密集层,其参数为一维标签中图像的大小。

如下面的代码所示,我使用 model.fit_generator() 而不是 model.fit,当开始训练模型时出现以下错误:

ValueError: Error when checking target: expected dense_10 to have shape 
(1,) but got array with shape (19316,)

为什么这是一个错误?我的密集输出是一个包含 19316 个元素的数组,为什么它期望它的形状为 (1,) ?

这里还附上了模型的摘要:

<小时/>

层(类型)输出形状参数#

conv2d_28(Conv2D)(无、26、877、32)544

<小时/>

activation_37(激活)(无、26、877、32)0

<小时/>

max_pooling2d_28(最大池化(无、13、438、32)0

<小时/>

conv2d_29(Conv2D)(无、12、437、16)2064

<小时/>

activation_38(激活)(无、12、437、16)0

<小时/>

max_pooling2d_29(最大池化(无、6、218、16)0

<小时/>

conv2d_30(Conv2D)(无、5、217、8)520

<小时/>

activation_39(激活)(无、5、217、8)0

<小时/>

max_pooling2d_30(最大池化(无、2、108、8)0

<小时/>

activation_40(激活)(无、2、108、8)0

<小时/>

flatten_10(压平)(无,1728)0

<小时/>

dropout_10(辍学)(无,1728)0

<小时/>

dense_10(密集)(无,19316)33397364

================================================== =================

总参数:33,400,492可训练参数:33,400,492不可训练参数:0

<小时/>

有什么建议吗?

提前非常感谢!

def generator(data_arr, batch_size = 10):

num = len(data_arr)

if num % batch_size != 0 :
num = int(num/batch_size)

# Loop forever so the generator never terminates
while True:

for offset in range(0, num, batch_size):

batch_samples = (data_arr[offset:offset+batch_size])

samples = []
labels = []

for batch_sample in batch_samples:

samples.append(batch_sample[0])
labels.append((np.array(batch_sample[1].flatten)).transpose())

X_ = np.array(samples)
Y_ = np.array(labels)

X_ = X_[:, :, :, newaxis]

print(X_.shape)
print(Y_.shape)

yield (X_, Y_)

# compile and train the model using the generator function
train_generator = generator(training_data, batch_size = 10)
validation_generator = generator(val_data, batch_size = 10)

run_opts = tf.RunOptions(report_tensor_allocations_upon_oom = True)

model = Sequential()

model.add(Conv2D(32, (4, 4), strides=(2, 2), input_shape = (55, 1756,
1)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size = (2, 2)))

model.add(Conv2D(16, (2, 2)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size = (2, 2)))

model.add(Conv2D(8, (2, 2)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size = (2, 2)))

model.add(Activation('softmax'))
model.add(Flatten()) # this converts our 3D feature maps to 1D feature
vectors
model.add(Dropout(0.3))
model.add(Dense(19316))

model.compile(loss = 'sparse_categorical_crossentropy',
optimizer = 'adam',
metrics = ['accuracy'],
options = run_opts)

model.summary()

batch_size = 20
nb_epoch = 6

model.fit_generator(train_generator,
steps_per_epoch = len(training_data) ,
epochs = nb_epoch,
validation_data = validation_generator,
validation_steps = len(val_data))

最佳答案

您当前正在使用 sparse_categorical_crossentropy 损失,它需要整数标签并在内部进行 one-hot 编码,但您的标签已经是 one-hot 编码的。

因此,对于这种情况,您应该恢复到 categorical_crossentropy 损失。

关于python - ValueError : Error when checking target: expected dense_10 to have shape (1, )但得到了形状为(19316,)的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57115873/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com