[英]Build keras CNN for vector
我是 ML 的初学者,正在尝试解决问题。 我有N
个向量作为输入。 每个向量的长度为10
。 我得到了N
个 0/1 的标签。 我需要在这些数据上训练一个 CNN(按提到的顺序):
我做了:
def get_model(inputShape, filters = 32, kernel_size = 3, pool_size = 4, strides = 1):
model = models.Sequential()
model.add(layers.Conv1D(filters, kernel_size))
model.add(layers.MaxPooling1D(pool_size, strides))
model.add(layers.Dense(1))
model.add(layers.Activation(activation='softmax'))
model.build(inputShape)
print(model.summary())
return model
model = get_model((None, None, 10))
然后,我测试我的 model 是否正确构建,我这样做:(未经培训)
x = np.array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
x = x.reshape(1, x.shape[0], x.shape[1])
print(model.predict(x))
我得到这个输出/错误:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv1d_1 (Conv1D) (None, None, 32) 992
_________________________________________________________________
max_pooling1d_1 (MaxPooling1 (None, None, 32) 0
_________________________________________________________________
dense_1 (Dense) (None, None, 1) 33
_________________________________________________________________
activation_1 (Activation) (None, None, 1) 0
=================================================================
Total params: 1,025
Trainable params: 1,025
Non-trainable params: 0
_________________________________________________________________
None
2020-06-30 19:44:01.763782: W tensorflow/core/framework/op_kernel.cc:1753] OP_REQUIRES failed at pooling_ops_common.cc:91 : Invalid argument: Computed output size would be negative: -3 [input_size: 0, effective_filter_size: 4, stride: 1]
Traceback (most recent call last):
File "model_predict.py", line 41, in <module>
model.predict(x)
File "/usr/local/lib/python3.8/dist-packages/keras/engine/training.py", line 1458, in predict
return training_arrays.predict_loop(self, f, ins,
File "/usr/local/lib/python3.8/dist-packages/keras/engine/training_arrays.py", line 324, in predict_loop
batch_outs = f(ins_batch)
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/backend.py", line 3792, in __call__
outputs = self._graph_fn(*converted_inputs)
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/function.py", line 1605, in __call__
return self._call_impl(args, kwargs)
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/function.py", line 1645, in _call_impl
return self._call_flat(args, self.captured_inputs, cancellation_manager)
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/function.py", line 1745, in _call_flat
return self._build_call_outputs(self._inference_function.call(
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/function.py", line 593, in call
outputs = execute.execute(
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/execute.py", line 59, in quick_execute
tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
tensorflow.python.framework.errors_impl.InvalidArgumentError: Computed output size would be negative: -3 [input_size: 0, effective_filter_size: 4, stride: 1]
[[node max_pooling1d_1/MaxPool (defined at /usr/local/lib/python3.8/dist-packages/keras/backend/tensorflow_backend.py:3007) ]] [Op:__inference_keras_scratch_graph_136]
Function call stack:
keras_scratch_graph
请建议我如何纠正这个问题。
问题在于x
的维度。 它对于Conv1D(kernel_size=3)
和MaxPooling1D(pool_size=4)
了。
我向x
添加了一个维度并减少kernel_size
和pool_size
:
x = np.array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]], dtype=np.float32)
x = x.reshape(1, x.shape[0], x.shape[1])
model = Sequential()
model.add(layers.Conv1D(filters=10, kernel_size=2))
model.add(layers.MaxPooling1D(pool_size=2, strides=1))
model.add(layers.Dense(1))
model.add(layers.Activation(activation='softmax'))
model.build((None, None, 10))
model.predict(x)
如果您需要,我可以分享指向 google colab 文件的链接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.