为了账号安全,请及时绑定邮箱和手机立即绑定

如何解决,tensorflow.python.framework.errors?

如何解决,tensorflow.python.framework.errors?

千巷猫影 2023-04-11 15:20:43
import tensorflow as tfimport numpy as npfrom sklearn.model_selection import train_test_splitnp.random.seed(4213)data = np.random.randint(low=1,high=29, size=(500, 160, 160, 10)) labels = np.random.randint(low=0,high=5, size=(500, 160, 160)) nclass = len(np.unique(labels))print (nclass)samples, width, height, nbands = data.shapeX_train, X_test, y_train, y_test = train_test_split(data, labels, test_size=0.25, random_state=421)print (X_train.shape)print (y_train.shape)arch = tf.keras.applications.VGG16(input_shape=[width, height, nbands],                      include_top=False,                      weights=None)model = tf.keras.Sequential()model.add(arch)model.add(tf.keras.layers.Flatten())model.add(tf.keras.layers.Dense(nclass))model.compile(optimizer = tf.keras.optimizers.Adam(0.0001),              loss=tf.keras.losses.SparseCategoricalCrossentropy(),              metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])    model.fit(X_train,          y_train,                                           epochs=3,          batch_size=32,          verbose=2)res = model.predict(X_test)print(res.shape)当运行上面的代码时,semantic segmentation我得到异常发生:InvalidArgumentError Incompatible shapes: [32,160,160] vs. [32]     [[node Equal (defined at c...:38) ]] [Op:__inference_train_function_1815]tensorflow.python.framework.errors_impl.InvalidArgumentError
查看完整描述

1 回答

?
烙印99

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,有效地乘以最后一层中的神经元数量。


查看完整回答
反对 回复 2023-04-11
  • 1 回答
  • 0 关注
  • 188 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信