我试图构建类似于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
时,它会毫无问题地运行代码。所以你需要更新这部分代码。希望能有所帮助。