Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.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 keras卷积层的输出形状误差_Python_Keras_Convolution_Keras Layer - Fatal编程技术网

Python keras卷积层的输出形状误差

Python keras卷积层的输出形状误差,python,keras,convolution,keras-layer,Python,Keras,Convolution,Keras Layer,我正在keras中创建完全卷积网络。我有一个简单的代码 from datetime import datetime import os os.environ["THEANO_FLAGS"] = "exception_verbosity=high" os.environ["KERAS_BACKEND"] = "theano" import cv2 import numpy as np from keras.models import Sequential from keras.layers i

我正在keras中创建完全卷积网络。我有一个简单的代码

from datetime import datetime
import os

os.environ["THEANO_FLAGS"] = "exception_verbosity=high"
os.environ["KERAS_BACKEND"] = "theano"

import cv2
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Convolution2D, MaxPooling2D, Deconvolution2D, UpSampling2D
from keras import backend as K

K.set_image_dim_ordering('th')

from read_dataset import read_input, read_output


# in_arr = np.load('input.npy')
# out_arr = np.load('output.npy')
in_arr = read_input()
in_arr = in_arr.swapaxes(1, 3)
in_arr = in_arr.swapaxes(2, 3)
out_arr = read_output()
out_arr = out_arr.swapaxes(1, 3)
out_arr = out_arr.swapaxes(2, 3)
start = datetime.now()
input_shape = in_arr.shape
output_shape = out_arr.shape

# normalize and split train data
X_train = in_arr[:5]/255.0
Y_train = out_arr[:5]/255.0
X_test = in_arr[800:]
Y_test = out_arr[800:]

# create convolutional neural network model
model = Sequential()
model.add(Convolution2D(64, 3, 3, border_mode='same', activation='relu', input_shape=(3, 800, 1360)))
model.add(Convolution2D(64, 3, 3, border_mode='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(UpSampling2D(size=(2, 2), dim_ordering='default'))
# model.add(Dense(10))
model.add(Convolution2D(1, 3, 3, border_mode='same'))
# model.add(Deconvolution2D(1, 3, 3, border_mode='same', activation='relu', output_shape=output_shape))
print('Input Shape', model.input_shape)
print('Output Shape', model.output_shape)

print(model.summary())
print('X_train shape', X_train.shape)
print('Y_train shape', Y_train.shape)

model.compile(loss='sparse_categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

model.fit(X_train, Y_train,
          batch_size=8, nb_epoch=10, verbose=1)
print(datetime.now() - start)
我有模型摘要

Input Shape (None, 3, 800, 1360)
Output Shape (None, 1, 800, 1360)
____________________________________________________________________________________________________
Layer (type)                     Output Shape          Param #     Connected to                     
====================================================================================================
convolution2d_1 (Convolution2D)  (None, 64, 800, 1360) 1792        convolution2d_input_1[0][0]      
____________________________________________________________________________________________________
convolution2d_2 (Convolution2D)  (None, 64, 800, 1360) 36928       convolution2d_1[0][0]            
____________________________________________________________________________________________________
maxpooling2d_1 (MaxPooling2D)    (None, 64, 400, 680)  0           convolution2d_2[0][0]            
____________________________________________________________________________________________________
dropout_1 (Dropout)              (None, 64, 400, 680)  0           maxpooling2d_1[0][0]             
____________________________________________________________________________________________________
upsampling2d_1 (UpSampling2D)    (None, 64, 800, 1360) 0           dropout_1[0][0]                  
____________________________________________________________________________________________________
convolution2d_3 (Convolution2D)  (None, 1, 800, 1360)  577         upsampling2d_1[0][0]             
====================================================================================================
Total params: 39,297
Trainable params: 39,297
Non-trainable params: 0
____________________________________________________________________________________________________
我有相应的训练样本量

X_train shape (5, 3, 800, 1360)
Y_train shape (5, 1, 800, 1360)
但我有一个错误

ValueError: Error when checking model target: expected convolution2d_3 to have shape (None, 1, 800, 1) but got array with shape (5, 1, 800, 1360)

我无法理解为什么它期望卷积2d_3具有形状(None,1800,1),如果在model.summary中是(None,1800,1360)。有什么问题吗?请告诉我哪里出了问题。

似乎即使您将后端dim\u ordering设置为“th”,它也不会应用。如果在每一层中设置特征dim_ordering='th'?把它放在每个图层定义中,除了dropout,你能打印你的
keras.json
文件吗?它应该在您的主目录中。您似乎没有更改后端。我的keras.json文件内容是
{“floatx”:“float32”,“epsilon”:1e-07,“backend”:“theano”}
尝试向其添加
“image\u dim\u ordering”:“th”
。这可能会导致问题。此外-小心
category\u cross\u entropy
,因为它需要一个
1d
输入作为目标,并且在您的情况下可能会表现得很奇怪,因为您的输出没有压缩到
[-1,1]
间隔。非常感谢您,Marcin Możejko,问题出在
稀疏的\u category\u crossentropy
。我把它改成了
分类的
,它就可以工作了。