使用 CNN 提取股票价格特征:解决模型输出尺寸错误

本文将介绍如何使用 CNN 模型从股票价格数据中提取特征。我们将使用 Python 和 Keras 库来构建 CNN 模型,并训练它来学习股票价格数据中的模式。

代码示例:

import pandas as pd
import numpy as np

# 加载数据
data = pd.read_excel('E:\pythonProject5\深度学习\新建 XLS 工作表.xls')

# 提取每日开盘价、收盘价、最高价和最低价
open_prices = data['开盘'].values
close_prices = data['收盘'].values
high_prices = data['最高'].values
low_prices = data['最低'].values

# 将价格数据转换为二维数组
prices = np.array([open_prices, close_prices, high_prices, low_prices])
prices = np.transpose(prices)

from keras.models import Sequential
from keras.layers import Conv1D, MaxPooling1D, Flatten, Dense, Dropout

# 定义CNN模型
model = Sequential()
model.add(Conv1D(64, 3, activation='relu', input_shape=(prices.shape[1], 1)))
model.add(MaxPooling1D(2))
model.add(Conv1D(32, 3, activation='relu'))
model.add(MaxPooling1D(2))
model.add(Conv1D(16, 3, activation='relu'))
model.add(Flatten())
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='linear'))

model.summary()

# 将数据转换为三维数组
prices = np.expand_dims(prices, axis=2)

# 将数据输入模型
features = model.predict(prices)

# 提取特征
features = np.squeeze(features)

错误分析: 在运行代码时,我们遇到了以下错误:

ValueError: One of the dimensions in the output is <= 0 due to downsampling in conv1d_1. Consider increasing the input size. Received input shape [None, 1, 64] which would produce output shape with a zero or negative value in a dimension.

这个错误提示指出模型的第二个卷积层(Conv1D)的输出大小为零或负数,这通常是由于输入数据的尺寸太小而导致的。

解决方法: 我们需要考虑增加输入数据的尺寸,例如通过以下方法:

  • 增加训练数据的时间序列长度: 收集更多的数据,例如增加训练数据中包含的天数,以延长时间序列的长度。
  • 增加卷积层的大小: 尝试使用更大的卷积核大小(例如 5 或 7),或者增加卷积层的数量,以提取更多特征。

总结: 本文通过解决模型输出尺寸错误的案例,展示了在使用 CNN 模型进行特征提取时,需要根据输入数据的大小和模型结构进行调整。通过增加输入数据尺寸或调整模型结构,可以有效解决这类错误并提高模型的性能。

注意: 本文仅提供一个基础示例,实际应用中可能需要根据具体的股票数据和任务进行调整。

版权声明: 本文内容仅供参考,请勿直接用于任何商业目的。

使用 CNN 提取股票价格特征:解决模型输出尺寸错误

原文地址: https://www.cveoy.top/t/topic/oZTr 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录