尝试在形状为(256,256,3)的样本数据集上训练卷积神经网络会给我带来ValueError。
我已经检查了数据的形状(它已经在通道中了,就像tensorflow想要的那样)。我尝试过使用与其他人相同的代码,但是它不起作用。我检查了数据集,看数据格式是否正确,而且似乎没有发现任何错误。
我的CNN的代码如下:
X = pickle.load(open("X.pickle", "rb")) # Shape (256, 256, 3)
y = pickle.load(open("y.pickle", "rb")) # The labels
X = X / 255.0 # Normalizing the data
model = Sequential()
model.add(Conv2D(64, (3,3), input_shape=(256, 256, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(64, (3,3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(64))
model.add(Dense(1))
model.add(Activation("sigmoid"))
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
model.fit(X, y, batch_size=32, validation_split=0.1)
我希望网络运行平稳,但是会输出以下内容(由于时间太长,因此不会发布整个错误日志):
File "neuralnet.py", line 18, in <module>
model.add(MaxPooling2D(pool_size=(2,2)))
ValueError: Negative dimension size caused by subtracting 2 from 1 for 'max_pooling2d_1/MaxPool' (op: 'MaxPool') with input shapes: [?,64,128,1].
修改 发布我的keras.json文件:
{
"epsilon": 1e-07,
"floatx": "float32",
"image_data_format": "channels_last",
"backend": "tensorflow"
}
以前是在data_formatchannels_first和后端theano上。我已经改变了这一点,但是不得不说,我直接使用了Keras的tensorflow实现。
更改为channels_last和后端tensorflow已更改了控制台的输出,现在它在model.fit行中给出了此错误:
ValueError: You are passing a target array of shape (8118, 1) while using as loss `categorical_crossentropy`. `categorical_crossentropy` expects targets to be binary matrices (1s and 0s) of shape (samples, classes). If your targets are integer classes, you can convert them to the expected format via:
```
from keras.utils import to_categorical
y_binary = to_categorical(y_int)
```
Alternatively, you can use the loss function `sparse_categorical_crossentropy` instead, which does expect integer targets.
答案 0 :(得分:0)
要解决最后一个问题,您可以使用此解决方案。
首先,将损失函数更改为"binary_crossentropy"
,而不是"categorical_crossentropy"
。 (由于我假设有两个类,所以采用了S型激活),前提是您的数据是一键编码的。
如果您不想对数据进行一次热编码(这是将0和1转换为[1,0]和[0,1]),则可以使用“ sparse_categorical_crossentropy”,就像错误提示一样