深度学习-烛台问题(CNN模型)

时间:2020-06-24 16:32:24

标签: python tensorflow keras deep-learning candlestick-chart

我是深度学习的新手,只是想知道我使用的方法是否正确。

此外,如果有人对模型创建中的更改有任何建议,也将不胜感激。

graphs look similar

我正在使用CNN模型来训练烛台,这些烛台的外观类似于附件中的“购买”,“出售”和“进行交易”图片。 (尝试了不同数量的条形,但结果相似)

我基于这篇文章的代码:

https://towardsdatascience.com/making-a-i-that-looks-into-trade-charts-62e7d51edcba

我做了一些更改,但是保持模型训练代码相似(小的更改并没有产生明显的准确性)

# Input the size of your sample images
img_width, img_height = 150, 150
nb_filters1 = 32
nb_filters2 = 32
nb_filters3 = 64
conv1_size = 3
conv2_size = 2
conv3_size = 5
pool_size = 2
# We have 2 classes, buy and sell
classes_num = 3
batch_size = 128
lr = 0.001
chanDim =3

model = Sequential()
model.add(Convolution2D(nb_filters1, conv1_size, conv1_size, border_mode ='same', input_shape=(img_height, img_width , 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(pool_size, pool_size)))

model.add(Convolution2D(nb_filters2, conv2_size, conv2_size, border_mode ="same"))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(pool_size, pool_size), dim_ordering='th'))

model.add(Convolution2D(nb_filters3, conv3_size, conv3_size, border_mode ='same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(pool_size, pool_size), dim_ordering='th'))

model.add(Flatten())
model.add(Dense(1024))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(classes_num, activation='softmax'))

model.summary()
model.compile(loss='categorical_crossentropy',
                      optimizer=optimizers.rmsprop(),
                      metrics=['accuracy'])

train_datagen = ImageDataGenerator(
    #rescale=1. / 255,
    horizontal_flip=False)

test_datagen = ImageDataGenerator(
    #rescale=1. / 255,
    horizontal_flip=False)

train_generator = train_datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_height, img_width),
    #shuffle=True,
    batch_size=batch_size,
    class_mode='categorical'
)

validation_generator = test_datagen.flow_from_directory(
    validation_data_dir,
    target_size=(img_height, img_width),
    batch_size=batch_size,
    #shuffle=True,
    class_mode='categorical')

这样,我的准确度为38%,如果删除“不交易”选项,则我的准确度为52%。

在训练之前和训练之后并不能大大提高准确性,这就是为什么我假设设置不是100%

预测时,结果总是偏向一侧(买入52%,卖出48%),几百张图像后结果不会有太大变化。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我假设您的三个选择是“购买”,“出售”和“不交易”。之所以跳到52%,是因为它区分了2个而不是3个选项。

关于低于预期的精度,我建议将损耗更改为Adam。也可能将辍学层移动到网络中间。我发现在每个池化层之后添加dropout = .2都是成功的。这样,节点将被丢弃到整个网络中,从而使所采用的节点路径具有更多的“多样性”。