Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ValueError:登录和标签必须具有相同的形状((无、124、124、3)与(无、2))_Python_Python 3.x_Tensorflow_Keras - Fatal编程技术网

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'