我是深度学习的新手,只是想知道我使用的方法是否正确。
此外,如果有人对模型创建中的更改有任何建议,也将不胜感激。
我正在使用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%),几百张图像后结果不会有太大变化。
有什么建议吗?
答案 0 :(得分:0)
我假设您的三个选择是“购买”,“出售”和“不交易”。之所以跳到52%,是因为它区分了2个而不是3个选项。
关于低于预期的精度,我建议将损耗更改为Adam
。也可能将辍学层移动到网络中间。我发现在每个池化层之后添加dropout = .2
都是成功的。这样,节点将被丢弃到整个网络中,从而使所采用的节点路径具有更多的“多样性”。