tensorflow和kears的data_format数据格式问题详解

DATA_FORMAT

这是一个无可奈何的问题,在如何表示一组彩色图片的问题上,Theano和TensorFlow发生了分歧, '日'模式,也即Theano模式会把100张RGB三通道的16×32(高为16宽为32)彩色图表示为下面这种形式(100,3,16,32)Caffe采取的也是这种方式。第0个维度是样本维,代表样本的数目,第1个维度是通道维,代表颜色通道数。后面两个就是高和宽了。这种theano风格的数据组织方法,称为“channels_first”,即通道维靠前。

而TensorFlow,的表达形式是(100,16,32,3),即把通道维放在了最后,这种数据组织方式称为“channels_last”。

tensorflow的格式如下:

  1. [batch,in_height,in_with,in_channels]批量批次1000高度图片的长宽宽通道通道数

  2. #channels RGB则为3黑白为1

Keras默认的数据组织形式在〜/ .keras / keras.json中规定,查看柯林斯该文件的image_data_format一项查看,也可在代码中通过K.image_data_format()函数返回,请在网络的训练和测试中保持维度顺序一致。

唉,真是蛋疼,你们商量好不行吗?

keras中添加卷积层时,可以指定deat_format格式:


   
   
   
   
  1. model.add(Convolution2D(
  2. batch_input_shape=( None, 1, 28, 28), #多少数据 通道数 宽 高
  3. filters= 32, #滤波器数量
  4. kernel_size= 5, #滤波器大小5x5
  5. strides= 1, #步长1
  6. padding= 'same', # Padding method
  7. data_format= 'channels_first',
  8. ))

1、代码中的DATA_FORMAT = 'channels_first',即通道维靠前。

[batch,in_channels,in_height,in_with]既批次:批次大小渠道:通道数高度:图片的长宽度:宽

2、当然也可以和tensorflow中的数据格式一样指定 channels_last = 'channels_last',keras默认为channels_last。

 

通用模板:

 


   
   
   
   
  1. from keras import backend as K
  2. w = 100 #图片宽度
  3. h = 100 #图片高度
  4. c = 3 #图片通道数
  5. if K.image_dim_ordering() == 'th':
  6. X_train = X_train.reshape( -1, c, w, h)
  7. X_test = X_test.reshape( -1, c, w, h)
  8. input_shape = ( 1, w, h)
  9. else:
  10. X_train = X_train.reshape( -1, w, h, c)
  11. X_test = X_test.reshape( -1, w, h, c)
  12. input_shape = (w, h, c)
  13. X_train = X_train.reshape( -1, w, h, c)
  14. X_test = X_test.reshape( -1, w, h, c)
  15. input_shape = (w, h, c)
  16. #例
  17. model.add(Convolution2D(
  18. batch_input_shape=( None,w,h,c), #多少数据 通道数 宽 高
  19. filters= 32, #滤波器数量
  20. kernel_size= 5, #滤波器大小
  21. strides= 1, #步长
  22. padding= 'same' # Padding method
  23. ))

 

你可能感兴趣的:(caffe相关,tensorflow)