Python 更改已训练和保存的神经网络Keras

Python 更改已训练和保存的神经网络Keras,python,tensorflow,keras,shapes,Python,Tensorflow,Keras,Shapes,我正在学习一个手势识别的教程() ,使用python、TensorFlow和Keras。 遗憾的是,该模型只是从JSON加载的,并且没有提供训练图像。 由于教程已经有2年了,我不得不更改一些现在可以使用的导入 这就是错误: During handling of the above exception, another exception occurred: Traceback (most recent call last): File ".\HandDetector.py", line 5

我正在学习一个手势识别的教程() ,使用python、TensorFlow和Keras。 遗憾的是,该模型只是从JSON加载的,并且没有提供训练图像。 由于教程已经有2年了,我不得不更改一些现在可以使用的导入

这就是错误:

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File ".\HandDetector.py", line 54, in <module>
    create_file=True,epoch_save = 1)
  File "C:\Users\simon\Dev\opencsv\tensor\projekt\zu heftig\Hand Gesture Detection\Python Scripts And Model\HandGestureModel\NetLoader.py", line 42, in __init__
    self.load_model() #load model
  File "C:\Users\simon\Dev\opencsv\tensor\projekt\zu heftig\Hand Gesture Detection\Python Scripts And Model\HandGestureModel\NetLoader.py", line 70, in load_model
    self.model = model_from_json(loaded_model_json)
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\engine\saving.py", line 492, in model_from_json
    return deserialize(config, custom_objects=custom_objects)
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\layers\__init__.py", line 55, in deserialize
    printable_module_name='layer')
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\utils\generic_utils.py", line 145, in deserialize_keras_object
    list(custom_objects.items())))
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\engine\sequential.py", line 301, in from_config
    model.add(layer)
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\engine\sequential.py", line 181, in add
    output_tensor = layer(self.outputs[0])
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\engine\base_layer.py", line 457, in __call__
    output = self.call(inputs, **kwargs)
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\layers\convolutional.py", line 171, in call
    dilation_rate=self.dilation_rate)
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\backend\tensorflow_backend.py", line 3650, in conv2d
    data_format=tf_data_format)
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\nn_ops.py", line 754, in convolution
    return op(input, filter)
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\nn_ops.py", line 838, in __call__
    return self.conv_op(inp, filter)
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\nn_ops.py", line 502, in __call__
    return self.call(inp, filter)
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\nn_ops.py", line 190, in __call__
    name=self.name)
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\gen_nn_ops.py", line 725, in conv2d
    data_format=data_format, dilations=dilations, name=name)
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 787, in _apply_op_helper
    op_def=op_def)
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\ops.py", line 3162, in create_op
    compute_device=compute_device)
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\ops.py", line 3208, in _create_op_helper
    set_shapes_for_outputs(op)
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\ops.py", line 2427, in set_shapes_for_outputs
    return _set_shapes_for_outputs(op)
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\ops.py", line 2400, in _set_shapes_for_outputs
    shapes = shape_func(op)
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\ops.py", line 2330, in call_with_requiring
    return call_cpp_shape_fn(op, require_shape_fn=True)
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\common_shapes.py", line 627, in call_cpp_shape_fn
    require_shape_fn)
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\common_shapes.py", line 691, in _call_cpp_shape_fn_impl
    raise ValueError(err.message)
ValueError: Negative dimension size caused by subtracting 5 from 2 for 'conv3_1/convolution' (op: 'Conv2D') with input shapes: [1,9,2,20], [5,5,20,40].
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“\HandDetector.py”,第54行,在
创建\u文件=真,历元\u保存=1)
文件“C:\Users\simon\Dev\opencsv\tensor\projekt\zu-heftig\Hand-signature Detection\Python Scripts And Model\HandGestureModel\NetLoader.py”,第42行,在\uu init中__
self.load_model()#load model
文件“C:\Users\simon\Dev\opencsv\tensor\projekt\zu heftig\Hand-signature Detection\Python Scripts And Model\HandGestureModel\NetLoader.py”,第70行,在load\u Model中
self.model=model_from_json(加载的_model_json)
文件“C:\Users\simon\AppData\Local\Programs\Python\36\lib\site packages\keras\engine\saving.py”,第492行,位于来自\u json的模型\u中
返回反序列化(配置,自定义对象=自定义对象)
文件“C:\Users\simon\AppData\Local\Programs\Python\36\lib\site packages\keras\layers\\uuuuu init\uuuu.py”,第55行,反序列化
可打印\u模块\u name='layer')
文件“C:\Users\simon\AppData\Local\Programs\Python\36\lib\site packages\keras\utils\generic\u utils.py”,位于反序列化\u keras\u对象的第145行
列表(自定义对象.项())
文件“C:\Users\simon\AppData\Local\Programs\Python\36\lib\site packages\keras\engine\sequential.py”,第301行,from\u config
模型。添加(图层)
文件“C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site packages\keras\engine\sequential.py”,第181行,添加
输出张量=层(自输出[0])
文件“C:\Users\simon\AppData\Local\Programs\Python\36\lib\site packages\keras\engine\base\u layer.py”,第457行,在调用中__
输出=自调用(输入,**kwargs)
文件“C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site packages\keras\layers\convolutional.py”,第171行,在调用中
扩张率=自身扩张率)
conv2d中的文件“C:\Users\simon\AppData\Local\Programs\Python\Python36\lib\site packages\keras\backend\tensorflow\u backend.py”,第3650行
数据_格式=tf_数据_格式)
卷积文件“C:\Users\simon\AppData\Local\Programs\Python\36\lib\site packages\tensorflow\Python\ops\nn\u ops.py”,第754行
返回操作(输入、过滤器)
文件“C:\Users\simon\AppData\Local\Programs\Python\36\lib\site packages\tensorflow\Python\ops\nn\u ops.py”,第838行,在调用中__
返回自转换操作(inp,过滤器)
文件“C:\Users\simon\AppData\Local\Programs\Python\36\lib\site packages\tensorflow\Python\ops\nn\u ops.py”,第502行,在调用中__
返回自调用(inp、筛选器)
文件“C:\Users\simon\AppData\Local\Programs\Python\36\lib\site packages\tensorflow\Python\ops\nn\u ops.py”,第190行,在调用中__
name=self.name)
conv2d中的文件“C:\Users\simon\AppData\Local\Programs\Python\36\lib\site packages\tensorflow\Python\ops\gen\u nn\u ops.py”,第725行
数据\格式=数据\格式,膨胀=膨胀,名称=名称)
文件“C:\Users\simon\AppData\Local\Programs\Python\36\lib\site packages\tensorflow\Python\framework\op_def_library.py”,第787行,位于_apply_op_helper中
op_def=op_def)
文件“C:\Users\simon\AppData\Local\Programs\Python\36\lib\site packages\tensorflow\Python\framework\ops.py”,第3162行,位于create\u op
计算设备=计算设备)
文件“C:\Users\simon\AppData\Local\Programs\Python\36\lib\site packages\tensorflow\Python\framework\ops.py”,第3208行,位于“create\op\u helper”中
为输出设置形状(op)
文件“C:\Users\simon\AppData\Local\Programs\Python\36\lib\site packages\tensorflow\Python\framework\ops.py”,第2427行,用于输出的集合形状
返回_设置_形状_输出(op)
文件“C:\Users\simon\AppData\Local\Programs\Python\36\lib\site packages\tensorflow\Python\framework\ops.py”,第2400行,在\u set\u shapes\u中用于\u输出
形状=形状函数(op)
文件“C:\Users\simon\AppData\Local\Programs\Python\36\lib\site packages\tensorflow\Python\framework\ops.py”,第2330行,在call\u中带有
回传呼叫\u cpp\u shape\u fn(op,require\u shape\u fn=True)
文件“C:\Users\simon\AppData\Local\Programs\Python\36\lib\site packages\tensorflow\Python\framework\common\u shapes.py”,第627行,在call\u cpp\u shape\u fn中
需要(形状)
文件“C:\Users\simon\AppData\Local\Programs\Python\36\lib\site packages\tensorflow\Python\framework\common\u shapes.py”,第691行,在\u call\u cpp\u shape\u fn\u impl中
提升值错误(错误消息)
ValueError:输入形状为[1,9,2,20],[5,5,20,40]的“conv3_1/卷积”(op:'Conv2D')从2中减去5导致负尺寸大小。
还有更多像这样的例外。 我使用的是Keras 2.2.4和Tensorflow 1.5.0


我能做些什么来解决这个问题吗?

发生错误是因为我使用了较新版本的keras 我需要补充一点

data_format='channels_first'
在keras的第一行中。
对不起,我弄错了。

打印模型摘要并检查每一层的张量尺寸。我认为您正在传递一个较小的图像作为输入,在某一层,它变得太小,因为错误消息显示“ValueError:从2中减去5导致的负尺寸大小”,正如@sahu所说,检查模型的摘要。此类错误是由于维度不匹配引起的(例如,与
MaxPooling2D
)。