InvalidArgumentError:tensorflow logits和标签仍然无法广播



我试图构建类似于RGB图像分类卷积模型的ResNet,我使用cifar-10图像数据集来训练我的模型。当我编译和评估模型时,我有一个无效的参数错误,说logits和labels必须是可广播的,我不确定这个错误的来源。我怎样才能消除这个错误?有人能指出我的代码出了什么问题吗?有什么办法解决这个问题吗?感谢

我当前的尝试

h = Conv2D(filters=32, kernel_size=(3,3), padding='same', activation='relu', input_shape=input_shape)(h)
h = Conv2D(filters=32, kernel_size=(3,3), activation='relu')(h)
h = MaxPooling2D(pool_size=(2,2))(h)
h = Dropout(0.25)(h)
h = Flatten()(h)
h = Dense(512, activation='relu')(h)
h = Dense(10, activation='softmax')(h)
model = Model(inputs=x, outputs=h)
return model
my_model = resNet_2(train_imgs)
my_model.compile(optimizer="adam", loss="categorical_crossentropy", metrics="accuracy")
model_history = my_model.fit(train_imgs, train_label_one_hot, batch_size=64, epochs=20, validation_data=(test_imgs, test_label_one_hot))
my_model.evaluate(train_imgs, train_label_one_hot)
my_model.evaluate(test_imgs, test_label_one_hot)

错误

InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-40-5a4cccc5d1ec> in <module>()
3 # my_model.summary()
4 # ## use cifar-10 image dataset
----> 5 my_history = my_model.fit(train_imgs, train_label_one_hot, batch_size=64, epochs=20, validation_data=(test_imgs,

test_label_one_hot((6 my_model.eevaluate(train_imgs,train_label_one_hot(7 my_model.eevaluate(test_imgs,test_label_one_hot(

8 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/execute.py

在quick_execute中(op_name、num_outputs、inputs、attrs、ctx、name(58 ctx.ensure_initialized((59张量=pywrap_tfe.tfe_Py_Execute(ctx._handle,设备名称,操作名称,--->60个输入、属性、num_outputs(61,核心除外_NotOkStatusException as e:62如果名称不是None:

InvalidArgumentError:  logits and labels must be broadcastable: logits_size=[192,10] labels_size=[64,10]
[[node categorical_crossentropy/softmax_cross_entropy_with_logits (defined at

:5(]][操作:__推理_训练_功能_119387]

我不明白为什么会发生这个错误,是我的模型有问题还是输入/输出调光设置不正确?有没有快速追踪误差并使模型评估工作正常的方法?有什么想法吗?感谢

更新

在这里,我使用泰勒展开来建立我的计算模型,使用exp_order意味着我使用了2个展开项或近似阶的泰勒级数。有人知道为什么我的模型会出现这样的错误吗?有什么办法解决这个问题吗?感谢

错误来自代码的这一部分

def get_exp(x, exp_order):
x_ = x[..., None] 
x_ = tf.tile(x_, multiples=[1, 1, exp_order + 1]) 
pows = tf.range(0, exp_order + 1, dtype=tf.float32)
x_p = tf.pow(x_, pows)
return x_p

当exp_order=2时,则tf.tile使x_的大小为三倍。当您的输入数据为batch_size=64时,上面的代码预计大小为192。当我输入exp_order = 0时,它会毫无问题地运行代码。所以你需要更新这部分代码。希望能有所帮助。

最新更新