Я создаю четыре сети с TFLearn: основной ANN для классификации изображений, базовый ANN для классификации звуковых файлов, CNN для классификации изображений и CNN для классификации звуковых файлов.Независимо от того, сколько я тренирую сети, какую скорость обучения или функцию активации я использую, или какой набор данных я тренирую, я всегда получаю одинаковые результаты.Сети всегда помещают все входные данные в одну категорию (например, сеть, обученная отличать изображения пчел от изображений без пчел, всегда идентифицирует каждое изображение как содержащее пчелу).
Я знаю, что не перегружаюсь, так как даженабор обучающих данных дает такой результат.
Что может быть причиной этой проблемы?
Вот код, который создает и тестирует сети.Они обучаются с использованием метода .fit ().
import tflearn
import tensorflow as tf
import numpy as np
import pickle as cPickle
import random
import os
from math import inf
def create_image_ann():
image_ann_input = tflearn.layers.core.input_data(shape=[None, 32, 32],
name='input_layer')
image_ann_layer_1 =
tflearn.layers.core.fully_connected(incoming=image_ann_input,
activation='linear', n_units=100, name='fc_layer_1')
image_ann_layer_2 =
tflearn.layers.core.fully_connected(incoming=image_ann_layer_1,
activation='linear', n_units=100, name='fc_layer_2')
image_ann_layer_3 =
tflearn.layers.core.fully_connected(incoming=image_ann_layer_2,
activation='linear', n_units=100, name='fc_layer_3')
image_ann_layer_4 =
tflearn.layers.core.fully_connected(incoming=image_ann_layer_3,
activation='linear', n_units=100, name='fc_layer_4')
image_ann_output =
tflearn.layers.core.fully_connected(incoming=image_ann_layer_4,
activation='linear', n_units=2, name='output_layer')
image_ann_regression =
tflearn.layers.estimator.regression(image_ann_output, optimizer='sgd',
learning_rate=0.1)
model = tflearn.DNN(image_ann_regression)
return model
def create_image_cnn():
input_layer = tflearn.layers.core.input_data(shape=[None, 32, 32])
input_layer = tf.expand_dims(input_layer, 2)
conv_layer_1 = tflearn.layers.conv.conv_2d(input_layer, nb_filter=20,
filter_size=5, activation='linear', name='conv_layer_1')
conv_layer_2 = tflearn.layers.conv.conv_2d(input_layer, nb_filter=20,
filter_size=5, activation='linear', name='conv_layer_2')
conv_layer_3 = tflearn.layers.conv.conv_2d(input_layer, nb_filter=20,
filter_size=10, activation='linear', name='conv_layer_3')
conv_layer_4 = tflearn.layers.conv.conv_2d(input_layer, nb_filter=20,
filter_size=10, activation='linear', name='conv_layer_4')
conv_layer_5 = tflearn.layers.conv.conv_2d(input_layer, nb_filter=20,
filter_size=15, activation='linear', name='conv_layer_5')
conv_layer_6 = tflearn.layers.conv.conv_2d(input_layer, nb_filter=20,
filter_size=15, activation='linear', name='conv_layer_6')
pool_layer_1 = tflearn.layers.conv.max_pool_2d(conv_layer_1, 2,
name='pool_layer_1')
pool_layer_2 = tflearn.layers.conv.max_pool_2d(conv_layer_2, 2,
name='pool_layer_2')
pool_layer_3 = tflearn.layers.conv.max_pool_2d(conv_layer_3, 2,
name='pool_layer_3')
pool_layer_4 = tflearn.layers.conv.max_pool_2d(conv_layer_4, 2,
name='pool_layer_4')
pool_layer_5 = tflearn.layers.conv.max_pool_2d(conv_layer_5, 2,
name='pool_layer_5')
pool_layer_6 = tflearn.layers.conv.max_pool_2d(conv_layer_6, 2,
name='pool_layer_6')
merged_pool_layer = tflearn.layers.merge_ops.merge([pool_layer_1,
pool_layer_2, pool_layer_3, pool_layer_4, pool_layer_5, pool_layer_6],
'concat', name='merge_layer')
fc_layer_1 = tflearn.layers.core.fully_connected(merged_pool_layer,
n_units=100, activation='linear', name='fc_layer_1')
output_layer = tflearn.layers.core.fully_connected(fc_layer_1,
n_units=2, activation='linear', name='output_layer')
regression = tflearn.layers.estimator.regression(output_layer,
optimizer='sgd', learning_rate=0.1)
model = tflearn.DNN(regression)
return model
def create_audio_ann():
input_layer = tflearn.layers.core.input_data(shape=[None, 500])
input_layer = tf.expand_dims(input_layer, 2)
fc_layer_1 = tflearn.layers.core.fully_connected(input_layer,
n_units=100, activation='linear', name='fc_layer_1')
fc_layer_2 = tflearn.layers.core.fully_connected(fc_layer_1,
n_units=100, activation='linear', name='fc_layer_1')
fc_layer_3 = tflearn.layers.core.fully_connected(fc_layer_2,
n_units=100, activation='linear', name='fc_layer_1')
fc_layer_4 = tflearn.layers.core.fully_connected(fc_layer_3,
n_units=100, activation='linear', name='fc_layer_1')
fc_layer_5 = tflearn.layers.core.fully_connected(fc_layer_4,
n_units=100, activation='linear', name='fc_layer_1')
output_layer = tflearn.layers.core.fully_connected(fc_layer_5,
n_units=3, activation='linear', name='output_layer')
regression = tflearn.layers.estimator.regression(output_layer,
optimizer='sgd', learning_rate=0.7)
model = tflearn.DNN(regression)
return model
def create_audio_cnn():
input_layer = tflearn.layers.core.input_data(shape=[None, 500])
input_layer = tf.expand_dims(input_layer, 2)
conv_layer_1 = tflearn.layers.conv.conv_1d(input_layer, nb_filter=20,
filter_size=50, activation='linear', name='conv_layer_1')
conv_layer_2 = tflearn.layers.conv.conv_1d(input_layer, nb_filter=20,
filter_size=75, activation='linear', name='conv_layer_1')
conv_layer_3 = tflearn.layers.conv.conv_1d(input_layer, nb_filter=20,
filter_size=100, activation='linear', name='conv_layer_1')
pool_layer_1 = tflearn.layers.conv.max_pool_1d(conv_layer_1,
kernel_size=5, name="pool_layer_1")
pool_layer_2 = tflearn.layers.conv.max_pool_1d(conv_layer_2,
kernel_size=5, name="pool_layer_2")
pool_layer_3 = tflearn.layers.conv.max_pool_1d(conv_layer_3,
kernel_size=5, name="pool_layer_3")
merged_pool_layer = tflearn.layers.merge_ops.merge(
[pool_layer_1, pool_layer_2, pool_layer_3], 'concat',
name='merge_layer')
fc_layer_1 = tflearn.layers.core.fully_connected(merged_pool_layer,
n_units=100, activation='linear', name='fc_layer_1')
output_layer = tflearn.layers.core.fully_connected(fc_layer_1,
n_units=3, activation='linear', name='output_layer')
regression = tflearn.layers.estimator.regression(output_layer,
optimizer='sgd', learning_rate=0.1)
model = tflearn.DNN(regression)
return model
def test_network(net, test_data):
test_inputs = test_data[0]
targets = test_data[1]
correct_answers = 0
outputs = net.predict(test_inputs)
for i in range(len(outputs)):
output = outputs[i]
max_output = -inf
max_output_index = -1
for j in range(len(output)):
if output[j] > max_output:
max_output = output[j]
max_output_index = j
input(str(output) + ', ' + str(targets[i]) + ': ' + str(targets[i]
[max_output_index] == 1))
if targets[i][max_output_index] == 1:
correct_answers += 1
print("Amount Correct: " + str(correct_answers) + " / " +
str(len(test_inputs)))
print(str(100.0 * correct_answers / len(test_inputs)) + "%")
def save(obj, file_path):
with open(file_path, 'wb') as fp:
cPickle.dump(obj, fp)
def load(file_path):
with open(file_path, 'rb') as fp:
return cPickle.load(fp)