Keras “如何修复”;+;的操作数类型不受支持:';非类型';和';int'&引用;错误

Keras “如何修复”;+;的操作数类型不受支持:';非类型';和';int'&引用;错误,keras,python-3.6,lstm,Keras,Python 3.6,Lstm,运行此函数时: def run_lstm(x_train,x_test,y_train,y_test): model = tf.keras.models.Sequential() model.add(tf.keras.layers.LSTM(500)) # model.add(tf.keras.layers.Dropout(0.5)) model.add(tf.keras.layers.Dense(18, activation='sigmoid')) mod

运行此函数时:

def run_lstm(x_train,x_test,y_train,y_test):
    model = tf.keras.models.Sequential()
    model.add(tf.keras.layers.LSTM(500))
#   model.add(tf.keras.layers.Dropout(0.5))
    model.add(tf.keras.layers.Dense(18, activation='sigmoid'))

    model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

    model.fit(x_train, y_train, batch_size=32, epochs=10, validation_data=(x_test,y_test))

    score = model.evaluate(x_test, y_test)

    print('Test loss:', score[0])
    print('Test accuracy:', score[1])
我得到这个错误:

Traceback (most recent call last):
  File "/Users/khaled/Documents/GitHub/deep-learning-for-human-activity-recognition-using-skeleton-datasets/train.py", line 294, in <module>
    run_lstm(x_train, x_test, y_train, y_test)
  File "/Users/khaled/Documents/GitHub/deep-learning-for-human-activity-recognition-using-skeleton-datasets/train.py", line 277, in run_lstm
    model.fit(x_train, y_train, batch_size=32, epochs=10, validation_data=(x_test,y_test))
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py", line 1509, in fit
    validation_split=validation_split)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py", line 993, in _standardize_user_data
    class_weight, batch_size)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py", line 1029, in _standardize_weights
    self._set_inputs(x)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/training/checkpointable/base.py", line 426, in _method_wrapper
    method(self, *args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py", line 1222, in _set_inputs
    self.build(input_shape=input_shape)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/keras/engine/sequential.py", line 222, in build
    layer.build(shape)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/keras/utils/tf_utils.py", line 149, in wrapper
    output_shape = fn(instance, input_shape)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/keras/layers/recurrent.py", line 552, in build
    self.cell.build(step_input_shape)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/keras/utils/tf_utils.py", line 149, in wrapper
    output_shape = fn(instance, input_shape)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/keras/layers/recurrent.py", line 1934, in build
    constraint=self.kernel_constraint)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py", line 586, in add_weight
    aggregation=aggregation)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/training/checkpointable/base.py", line 591, in _add_variable_with_custom_getter
    **kwargs_for_getter)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py", line 1986, in make_variable
    aggregation=aggregation)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/ops/variables.py", line 145, in __call__
    return cls._variable_call(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/ops/variables.py", line 141, in _variable_call
    aggregation=aggregation)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/ops/variables.py", line 120, in <lambda>
    previous_getter = lambda **kwargs: default_variable_creator(None, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/ops/variable_scope.py", line 2434, in default_variable_creator
    import_scope=import_scope)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/ops/variables.py", line 147, in __call__
    return super(VariableMetaclass, cls).__call__(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/ops/resource_variable_ops.py", line 297, in __init__
    constraint=constraint)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/ops/resource_variable_ops.py", line 411, in _init_from_args
    initial_value(), name="initial_value", dtype=dtype)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py", line 1970, in <lambda>
    shape, dtype=dtype, partition_info=partition_info)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/ops/init_ops.py", line 470, in __call__
    scale /= max(1., (fan_in + fan_out) / 2.)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
回溯(最近一次呼叫最后一次):
文件“/Users/khaled/Documents/GitHub/deep learning for human activity recognition using skeleton dataset/train.py”,第294行,中
运行lstm(x_列、x_测试、y_列、y_测试)
文件“/Users/khaled/Documents/GitHub/deep learning for human activity recognition using skeleton dataset/train.py”,第277行,run_lstm
模型拟合(x_序列,y_序列,批量大小=32,历次=10,验证数据=(x_测试,y_测试))
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/tensorflow/Python/keras/engine/training.py”,第1509行
验证分割=验证分割)
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/tensorflow/Python/keras/engine/training.py”,第993行,在用户数据中
类别(重量、批次大小)
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/Python/keras/engine/training.py”,第1029行,在
自设置输入(x)
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/tensorflow/Python/training/checkpointable/base.py”,第426行,在方法包装中
方法(self、*args、**kwargs)
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/Python/keras/engine/training.py”,第1222行,在集合输入中
自我构建(输入形状=输入形状)
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/tensorflow/Python/keras/engine/sequential.py”,第222行,内部版本
层。构建(形状)
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/tensorflow/Python/keras/utils/tf_utils.py”,第149行,在包装器中
输出形状=fn(实例,输入形状)
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/tensorflow/Python/keras/layers/recurrent.py”,第552行,内部版本
self.cell.build(步骤\输入\形状)
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/tensorflow/Python/keras/utils/tf_utils.py”,第149行,在包装器中
输出形状=fn(实例,输入形状)
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/tensorflow/Python/keras/layers/recurrent.py”,第1934行,内部版本
constraint=self.kernel\u约束)
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/tensorflow/Python/keras/engine/base_layer.py”,第586行,在add_weight中
聚合=聚合)
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/tensorflow/Python/training/checkpointable/base.py”,第591行,在“添加变量”和“自定义”getter中
**kwargs_用于(获取者)
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/tensorflow/Python/keras/engine/base_layer.py”,第1986行,在make_变量中
聚合=聚合)
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/tensorflow/Python/ops/variables.py”,第145行,在__
返回cls.\u变量\u调用(*args,**kwargs)
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/tensorflow/Python/ops/variables.py”,第141行,在变量调用中
聚合=聚合)
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/tensorflow/Python/ops/variables.py”,第120行,在
上一个\u getter=lambda**kwargs:默认\u变量\u创建者(无,**kwargs)
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/tensorflow/Python/ops/variable\u scope.py”,第2434行,默认为变量\u creator
导入范围=导入范围)
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/tensorflow/Python/ops/variables.py”,第147行,在__
返回super(VariableMetaclass,cls)。\调用(*args,**kwargs)
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/tensorflow/Python/ops/resource_variable_ops.py”,第297行,在u_init中__
约束=约束)
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/tensorflow/Python/ops/resource_variable_ops.py”,第411行,在参数的_init_中
初始值(),name=“初始值”,dtype=dtype)
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/tensorflow/Python/keras/engine/base_layer.py”,第1970行,在
形状,数据类型=数据类型,分区信息=分区信息)
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/tensorflow/Python/ops/init_ops.py”,第470行,在__
比例/=最大值(1.,(扇入+扇出)/2.)
TypeError:不支持+:“NoneType”和“int”的操作数类型
我应该换什么


谢谢。

我在代码中添加了两行代码,解决了这个问题:

x_train = x_train.reshape(x_train.shape[0], x_train.shape[1], 1)
x_test = x_test.reshape(x_test.shape[0], x_test.shape[1], 1)
该功能将是:

def run_lstm(x_train,x_test,y_train,y_test):
     x_train = x_train.reshape(x_train.shape[0], x_train.shape[1], 1)
     x_test = x_test.reshape(x_test.shape[0], x_test.shape[1], 1)

     model = tf.keras.models.Sequential()

     model.add(tf.keras.layers.LSTM(50))
#    model.add(tf.keras.layers.Dropout(0.5))
#    model.add(tf.keras.layers.Flatten())

     model.add(tf.keras.layers.Dense(18, activation='sigmoid'))

     model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

     model.fit(x_train, y_train, batch_size=300, epochs=2, validation_data=(x_test,y_test))

     score = model.evaluate(x_test, y_test)

     print('Test loss:', score[0])
     print('Test accuracy:', score[1])

您能否在函数中打印x_列、x_测试、y_列和y_测试的形状,并将结果添加到问题中?此外,如果不是这样的话,我建议使用tab缩进函数中的代码。事实上,问题在于我的数据集的维度:它是dim=2,而不是tensorflow中张量的输入大小3。