我正在使用情绪分析进行股票市场预测项目。我正在尝试创建一个CNN模型,在该模型中,我要传递4000天的批次大小为100的股票数据。在密集层的末尾,我想添加回归层以获得股票的价格。
def Model(train_data):
input_layer = tf.reshape(tf.cast(train_data, tf.float32), [-1, 1, 100, 2])
conv1 = tf.layers.conv2d(inputs=input_layer,filters=32,kernel_size=[1, 5],padding="same",
activation=tf.nn.relu,strides=1,kernel_initializer=tf.contrib.layers.variance_scaling_initializer())
pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[1, 2], strides=[1,2])
conv2 = tf.layers.conv2d(inputs=pool1,filters=8,kernel_size=[1, 5],padding="same",activation=tf.nn.relu,
strides=1,kernel_initializer=tf.contrib.layers.variance_scaling_initializer())
pool2 = tf.layers.max_pooling2d(inputs=conv2, pool_size=[1, 5], strides=[1,5])
conv3 = tf.layers.conv2d(inputs=pool2,filters=2,kernel_size=[1, 2],padding="same",activation=tf.nn.relu,
strides=1,kernel_initializer=tf.contrib.layers.variance_scaling_initializer())
pool3 = tf.layers.max_pooling2d(inputs=conv3, pool_size=[1, 2], strides=[1, 2])
pool3_flat = tf.reshape(pool3, [40, 1 * 5 * 2])
dense = tf.layers.dense(inputs=pool3_flat, units=5, activation=tf.nn.relu)
dropout = tf.layers.dropout(
inputs=dense, rate=0.2, training=mode == tf.estimator.ModeKeys.TRAIN)
logits = tf.layers.dense(inputs=dropout, units=1)
我正在为模型引用https://www.tensorflow.org/tutorials/estimators/cnn,但他们正在进行分类。有人可以建议一种回归方法吗?该模型的train_data的形状为[2,4000],其中一行用于标准化股票价格,另一行用于情感因素。
答案 0 :(得分:0)
您唯一需要做的就是在末端添加一个完全连接的层,然后选择一个线性激活。直观地,这将获取Conv图层的输出,并将y = mx + b应用于它们。完全连接的输出层将有40个节点(每个输出一个)。实际上,该代码中已经有一层密集层。如果您的输出大小为40,则将其设置为40而不是5。
请注意,传统上,CNN用于图像分类,直到最近才开始迁移到其他应用程序(例如垃圾邮件检测)。我建议先尝试一个简单的前馈神经网络,如果那不起作用,也许在此之前尝试一个RNN。