使用keras构建CNN来处理向量

我是机器学习的新手,正在尝试解决一个问题。我得到了N个向量作为输入,每个向量的长度为10。我还得到了N个标签,这些标签是0/1。我需要在这个数据上训练一个CNN,它应该按以下顺序包含:

  1. 卷积层
  2. 最大池化
  3. 全连接层
  4. 用于获得二进制输出的Softmax激活函数

我做了以下尝试:

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 modelmodel = get_model((None, None, 10))

然后,为了测试我的模型是否构建正确,我做了以下操作(未进行训练):

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,025Trainable params: 1,025Non-trainable params: 0_________________________________________________________________None2020-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_sizepool_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文件的链接。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注