Python ValueError:登录和标签必须具有相同的形状((无、124、124、3)与(无、2))
我正在开发一个图像分类模型。我将图像的输入形状设置为Python ValueError:登录和标签必须具有相同的形状((无、124、124、3)与(无、2)),python,python-3.x,tensorflow,keras,Python,Python 3.x,Tensorflow,Keras,我正在开发一个图像分类模型。我将图像的输入形状设置为(128128,3),但是当我运行模型时,fit给出了一个错误。 我的输入数据是 real_data = [f for f in os.listdir(data_dir+'/test') if f.endswith('.png')] fake_data = [f for f in os.listdir(data_dir+'/test_f') if f.endswith('.png')] print(real_data) X = [] Y = [
(128128,3)
,但是当我运行模型时,fit
给出了一个错误。
我的输入数据是
real_data = [f for f in os.listdir(data_dir+'/test') if f.endswith('.png')]
fake_data = [f for f in os.listdir(data_dir+'/test_f') if f.endswith('.png')]
print(real_data)
X = []
Y = []
for img in real_data:
X.append(img_to_array(load_img(data_dir+'/test/'+img)) / 255.0)
Y.append(1)
for img in fake_data:
X.append(img_to_array(load_img(data_dir+'/test_f/'+img)) / 255.0)
Y.append(0)
Y_val_org = Y
X = np.array(X)
Y = to_categorical(Y, 2)
print(X)
print(Y)
我的模型是
model = Sequential()
model.add(Conv2D(16, kernel_size=(3,3), activation='relu',input_shape=(128,128,3)))
model.add(Conv2D(16, kernel_size=(3,3), activation='relu'))
model.add(Dense(units=3, activation='softmax'))
model.compile(loss='binary_crossentropy',
optimizer=optimizers.Adam(lr=1e-5, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False),
metrics=['accuracy'])
#model.build(input_shape=(128,128,3))
model.summary()
模型概要如下所示
Model: "sequential_80"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_892 (Conv2D) (None, 126, 126, 16) 448
_________________________________________________________________
conv2d_893 (Conv2D) (None, 124, 124, 16) 2320
_________________________________________________________________
dense_48 (Dense) (None, 124, 124, 3) 51
=================================================================
Total params: 2,819
Trainable params: 2,819
Non-trainable params: 0
_________________________________________________________________
当我通过model.fit()
这就是我得到的错误
Epoch 1/20
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-168-b3e2ed37ed88> in <module>()
2 EPOCHS = 20
3 BATCH_SIZE = 100
----> 4 history = model.fit(X_train, Y_train, batch_size = BATCH_SIZE, epochs = EPOCHS, validation_data = (X_val, Y_val))
9 frames
/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs)
975 except Exception as e: # pylint:disable=broad-except
976 if hasattr(e, "ag_error_metadata"):
--> 977 raise e.ag_error_metadata.to_exception(e)
978 else:
979 raise
ValueError: in user code:
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:805 train_function *
return step_function(self, iterator)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:795 step_function **
outputs = model.distribute_strategy.run(run_step, args=(data,))
/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:1259 run
return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:2730 call_for_each_replica
return self._call_for_each_replica(fn, args, kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:3417 _call_for_each_replica
return fn(*args, **kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:788 run_step **
outputs = model.train_step(data)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:756 train_step
y, y_pred, sample_weight, regularization_losses=self.losses)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/compile_utils.py:203 __call__
loss_value = loss_obj(y_t, y_p, sample_weight=sw)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/losses.py:152 __call__
losses = call_fn(y_true, y_pred)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/losses.py:256 call **
return ag_fn(y_true, y_pred, **self._fn_kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/util/dispatch.py:201 wrapper
return target(*args, **kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/losses.py:1608 binary_crossentropy
K.binary_crossentropy(y_true, y_pred, from_logits=from_logits), axis=-1)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/util/dispatch.py:201 wrapper
return target(*args, **kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/backend.py:4979 binary_crossentropy
return nn.sigmoid_cross_entropy_with_logits(labels=target, logits=output)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/util/dispatch.py:201 wrapper
return target(*args, **kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/ops/nn_impl.py:174 sigmoid_cross_entropy_with_logits
(logits.get_shape(), labels.get_shape()))
ValueError: logits and labels must have the same shape ((None, 124, 124, 3) vs (None, 2))
纪元1/20
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
2个时代=20
3批次尺寸=100
---->4历史记录=模型拟合(X_序列,Y_序列,批次大小=批次大小,年代=年代,验证数据=(X_val,Y_val))
9帧
/包装器中的usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/func_graph.py(*args,**kwargs)
975例外情况为e:#pylint:disable=broad except
976如果hasattr(e,“AGU错误元数据”):
-->977将e.ag\u错误\u元数据引发到\u异常(e)
978其他:
979提高
ValueError:在用户代码中:
/usr/local/lib/python3.7/dist包/tensorflow/python/keras/engine/training.py:805 train_函数*
返回步骤_函数(self、迭代器)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:795 step_函数**
输出=模型。分配策略。运行(运行步骤,参数=(数据,)
/usr/local/lib/python3.7/dist包/tensorflow/python/distribute/distribute_lib.py:1259运行
返回self.\u扩展。为每个\u副本调用\u(fn,args=args,kwargs=kwargs)
/usr/local/lib/python3.7/dist包/tensorflow/python/distribute/distribute_lib.py:2730为每个复制副本调用
返回自我。为每个副本(fn、ARG、kwargs)调用
/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute\u-lib.py:3417\u为每个副本调用\u
返回fn(*args,**kwargs)
/usr/local/lib/python3.7/dist包/tensorflow/python/keras/engine/training.py:788运行步骤**
输出=型号列车步进(数据)
/usr/local/lib/python3.7/dist包/tensorflow/python/keras/engine/training.py:756 train\u步骤
y、 y_pred,样本_权重,正则化_损失=自身损失)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/compile\u-utils.py:203\u调用__
损耗值=损耗对象(y\u t,y\u p,样品重量=sw)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/loss.py:152\u调用__
损失=催缴股款fn(y_真,y_pred)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/loss.py:256调用**
返回ag_fn(y_true,y_pred,**self.\u fn_kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/util/dispatch.py:201包装器
返回目标(*args,**kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/loss.py:1608二进制交叉熵
K.二进制交叉熵(y_真,y_pred,from_logits=from_logits),轴=-1)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/util/dispatch.py:201包装器
返回目标(*args,**kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/backend.py:4979二进制文件
返回nn.sigmoid\u cross\u entropy\u和logits(标签=目标,logits=输出)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/util/dispatch.py:201包装器
返回目标(*args,**kwargs)
/usr/local/lib/python3.7/dist packages/tensorflow/python/ops/nn_impl.py:174 sigmoid_cross_entropy_with_logits
(logits.get\u shape(),labels.get\u shape())
ValueError:登录和标签必须具有相同的形状((无、124、124、3)与(无、2))
将您的型号更改为:
model.add(Conv2D(16, kernel_size=(3,3), activation='relu'))
model.add(Flatten()) # added flatten before dense
model.add(Dense(units=2, activation='softmax'))
最后一个输出应该是2个单位,因为您有2个类。同时将您的损失更改为:
loss='categorical_crossentropy'
因为你将
应用于_category()
似乎你在安装前平整了x\u列
,因为49152=128*128*3。但即使我移除了flatte
部分,只保留了2层Conv2D
和一层致密,它仍然会给我同样的错误。模型中的平坦层很好。我试图指出,也许x_火车在被送入模型之前被压扁了。x_火车是什么形状的?哦,是的,它早些时候被压扁了。但在我删除该部分后,我得到了一个新的错误logits和labels必须具有相同的形状((None,124,124,3)vs(None,2))
您能用最新的更改更新问题吗?
loss='categorical_crossentropy'