Python 尝试修复神经网络的构造(错误消息:负维?)

Python 尝试修复神经网络的构造(错误消息:负维?),python,numpy,tensorflow,keras,Python,Numpy,Tensorflow,Keras,这是一个基于第12页B.3节描述的模型 我尝试将其转换为Keras 2.0的结果。以下是原始代码: 我尝试运行以下代码: parser = argparse.ArgumentParser(description= '''This code first trains the user-specific network (C[1-4]) using small-batch ADAM and large-batch ADAM, and t

这是一个基于第12页B.3节描述的模型

我尝试将其转换为Keras 2.0的结果。以下是原始代码:

我尝试运行以下代码:

parser = argparse.ArgumentParser(description=
                '''This code first trains the user-specific network (C[1-4])
                using small-batch ADAM and large-batch ADAM, and then plots
                the parametric plot connecting the two minimizers
                illustrating the sharpness difference.''')
parser.add_argument('-n', '--network', help='''Selects which network
                    to plot the parametric plots for.
                    Choices are C1, C2, C3 and C4.''', required=True)
network_choice = vars(parser.parse_args())['network']


nb_epoch = 20

# the data, shuffled and split between train and test sets
if network_choice in ['C1', 'C2']:
    (X_train, y_train), (X_test, y_test) = cifar10.load_data()
    nb_classes = 10
elif network_choice in ['C3', 'C4']:
    (X_train, y_train), (X_test, y_test) = cifar100.load_data()
    nb_classes = 100
else:
    raise ValueError('''Invalid choice of network.
                     Please choose one of C1, C2, C3 or C4.
                     Refer to the paper for details regarding these networks''')

X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255

# convert class vectors to binary class matrices
Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_classes)

# build the network
if network_choice in ['C1', 'C3']:
    model = network_zoo.shallownet(nb_classes)
elif network_choice in ['C2', 'C4']:
    model = network_zoo.deepnet(nb_classes)
# let's train the model using Adam
model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])
model.save_weights('x0.h5')

# let's first find the small-batch solution
model.fit(X_train, Y_train,
          batch_size=256,
          nb_epoch=nb_epoch,
          validation_data=(X_test, Y_test),
          shuffle=True)
并接收以下错误消息:

Traceback (most recent call last):
  File "plot_parametric_plot.py", line 64, in <module>
    model = network_zoo.shallownet(nb_classes)
  File "/mnt_home/klee/LBSBGenGapSharpnessResearch/network_zoo.py", line 36, in shallownet
    model.add(Conv2D(64, (5, 5), input_shape=img_size))
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/keras/engine/sequential.py", line 166, in add
    layer(x)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py", line 75, in symbolic_fn_wrapper
    return func(*args, **kwargs)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/keras/engine/base_layer.py", line 489, in __call__
    output = self.call(inputs, **kwargs)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/keras/layers/convolutional.py", line 171, in call
    dilation_rate=self.dilation_rate)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py", line 3717, in conv2d
    **kwargs)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/tensorflow_core/python/ops/nn_ops.py", line 918, in convolution_v2
    name=name)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/tensorflow_core/python/ops/nn_ops.py", line 1010, in convolution_internal
    name=name)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/tensorflow_core/python/ops/gen_nn_ops.py", line 969, in conv2d
    data_format=data_format, dilations=dilations, name=name)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/tensorflow_core/python/framework/op_def_library.py", line 742, in _apply_op_helper
    attrs=attr_protos, op_def=op_def)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/tensorflow_core/python/framework/func_graph.py", line 595, in _create_op_internal
    compute_device)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py", line 3322, in _create_op_internal
    op_def=op_def)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py", line 1786, in __init__
    control_input_ops)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py", line 1622, in _create_c_op
    raise ValueError(str(e))
ValueError: Negative dimension size caused by subtracting 5 from 3 for 'conv2d_1/convolution' (op: 'Conv2D') with input shapes: [?,3,32,32], [5,5,32,64].
回溯(最近一次呼叫最后一次):
文件“plot\u parametric\u plot.py”,第64行,在
模型=网络(nb类)
文件“/mnt_home/klee/LBSBGenGapSharpnessResearch/network_zoo.py”,第36行,shallownet
添加(Conv2D(64,(5,5),输入形状=img大小))
文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site packages/keras/engine/sequential.py”,第166行,添加
层(x)
文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site packages/keras/backend/tensorflow\u backend.py”,第75行,符号包装
返回函数(*args,**kwargs)
文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site packages/keras/engine/base_layer.py”,第489行,在调用中__
输出=自调用(输入,**kwargs)
文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site packages/keras/layers/convolutional.py”,第171行,在调用中
扩张率=自身扩张率)
conv2d中的文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site packages/keras/backend/tensorflow_backend.py”,第3717行
**kwargs)
文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site packages/tensorflow_core/python/ops/nn_ops.py”,第918行,卷积第2版
名称=名称)
文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site packages/tensorflow\u core/python/ops/nn\u ops.py”,第1010行,卷积
名称=名称)
conv2d第969行的文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site packages/tensorflow_core/python/ops/gen_nn_ops.py”
数据\格式=数据\格式,膨胀=膨胀,名称=名称)
文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site packages/tensorflow_core/python/framework/op_def_library.py”,第742行,在“应用”op_helper中
attrs=attr_protos,op_def=op_def)
文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site packages/tensorflow\u core/python/framework/func\u graph.py”,第595行,位于“创建”和“操作”内部
计算机(U设备)
文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site packages/tensorflow\u core/python/framework/ops.py”,第3322行,位于“创建”和“操作”内部
op_def=op_def)
文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site-packages/tensorflow\u-core/python/framework/ops.py”,第1786行,在__
控制(输入操作)
文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site packages/tensorflow\u core/python/framework/ops.py”,第1622行,在“create\u c\u op”中
提升值错误(str(e))
ValueError:输入形状为[?,3,32,32],[5,5,32,64]的“conv2d_1/卷积”(op:“conv2d”)从3中减去5导致负尺寸大小。
虽然我不知道这意味着什么

更新:在写下Marco Celani的评论后,以下是我在运行主代码后收到的新错误消息:

Traceback (most recent call last):
  File "plot_parametric_plot.py", line 64, in <module>
    model = network_zoo.shallownet(nb_classes)
  File "/mnt_home/klee/LBSBGenGapSharpnessResearch/network_zoo.py", line 36, in shallownet
    model.add(Conv2D(64, (5, 5), input_shape=img_size, data_format='channels_first'))
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/keras/engine/sequential.py", line 166, in add
    layer(x)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py", line 75, in symbolic_fn_wrapper
    return func(*args, **kwargs)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/keras/engine/base_layer.py", line 489, in __call__
    output = self.call(inputs, **kwargs)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/keras/layers/convolutional.py", line 171, in call
    dilation_rate=self.dilation_rate)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py", line 3701, in conv2d
    x, tf_data_format = _preprocess_conv2d_input(x, data_format)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py", line 3574, in _preprocess_conv2d_input
    if not _has_nchw_support() or force_transpose:
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py", line 522, in _has_nchw_support
    gpus_available = len(_get_available_gpus()) > 0
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py", line 506, in _get_available_gpus
    _LOCAL_DEVICES = tf.config.experimental_list_devices()
AttributeError: module 'tensorflow_core._api.v2.config' has no attribute 'experimental_list_devices'
回溯(最近一次呼叫最后一次):
文件“plot\u parametric\u plot.py”,第64行,在
模型=网络(nb类)
文件“/mnt_home/klee/LBSBGenGapSharpnessResearch/network_zoo.py”,第36行,shallownet
添加(Conv2D(64,(5,5),输入形状=图像大小,数据格式=通道优先)
文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site packages/keras/engine/sequential.py”,第166行,添加
层(x)
文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site packages/keras/backend/tensorflow\u backend.py”,第75行,符号包装
返回函数(*args,**kwargs)
文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site packages/keras/engine/base_layer.py”,第489行,在调用中__
输出=自调用(输入,**kwargs)
文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site packages/keras/layers/convolutional.py”,第171行,在调用中
扩张率=自身扩张率)
conv2d中的文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site packages/keras/backend/tensorflow_backend.py”,第3701行
x、 tf_数据_格式=_预处理_conv2d_输入(x,数据_格式)
文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site packages/keras/backend/tensorflow_backend.py”,第3574行,在预处理输入中
如果不支持,则支持()或强制转置:
文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site packages/keras/backend/tensorflow\u backend.py”,第522行,in\u有\u nchw\u支持
GPU可用=len(\u get\u available\u gpu())>0
文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site-packages/keras/backend/tensorflow\u backend.py”,第506行,位于GPU中
_LOCAL\u DEVICES=tf.config.experimental\u list\u DEVICES()
AttributeError:模块“tensorflow\u core.\u api.v2.config”没有“实验性\u列表\u设备”属性

这意味着您无法应用任何操作,因为您在网络中减少了太多维度(低于0)


查看您的数据格式似乎您的图像是(3,32,32),因此通道是第一维度。默认情况下,Keras会对最后一个维度中的通道应用卷积。要覆盖该错误,请尝试在卷积层和池层中定义
数据\u format='channels\u first'
,编辑后是否出现相同的错误?抱歉,是的,我粘贴了错误的代码。我在原始帖子中添加的新代码(对帖子的编辑)是最初导致错误的原因。在我将您的修复程序输入到卷积层后,我得到以下错误:回溯文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site packages/keras/backend/tensorflow_backend.py”,第522行,在第506行“获取可用GPU设备”中的“支持GPU可用”=len(\u get\u available\u gpus())>0文件“/home/klee/anaconda3/envs/gripev/lib/python3.7/site packages/keras/backend/tensorflow\u backend.py”
Traceback (most recent call last):
  File "plot_parametric_plot.py", line 64, in <module>
    model = network_zoo.shallownet(nb_classes)
  File "/mnt_home/klee/LBSBGenGapSharpnessResearch/network_zoo.py", line 36, in shallownet
    model.add(Conv2D(64, (5, 5), input_shape=img_size, data_format='channels_first'))
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/keras/engine/sequential.py", line 166, in add
    layer(x)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py", line 75, in symbolic_fn_wrapper
    return func(*args, **kwargs)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/keras/engine/base_layer.py", line 489, in __call__
    output = self.call(inputs, **kwargs)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/keras/layers/convolutional.py", line 171, in call
    dilation_rate=self.dilation_rate)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py", line 3701, in conv2d
    x, tf_data_format = _preprocess_conv2d_input(x, data_format)
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py", line 3574, in _preprocess_conv2d_input
    if not _has_nchw_support() or force_transpose:
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py", line 522, in _has_nchw_support
    gpus_available = len(_get_available_gpus()) > 0
  File "/home/klee/anaconda3/envs/sharpenv/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py", line 506, in _get_available_gpus
    _LOCAL_DEVICES = tf.config.experimental_list_devices()
AttributeError: module 'tensorflow_core._api.v2.config' has no attribute 'experimental_list_devices'