CNN不会提高其性能

时间:2019-11-26 09:19:52

标签: python tensorflow machine-learning deep-learning conv-neural-network

问题出在这里,我有一个2200x39的数据集,我知道...非常差。其中38个要素(纹理和统计量),最后一列是输出类,可以为0或1。我的数据集是平衡的(1100“ 1”和1100“ 0”)。

我正在尝试提高性能,以至于损失为0.69,准确性为0.49。我试图添加一层,添加神经元,不同的参数。没什么,准确性和损失的值只会改变一点。

所以,首先,我导入所有需要的东西

import numpy as np

from sklearn.model_selection import train_test_split
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense, BatchNormalization, Conv1D
from tensorflow.keras.optimizers import SGD

import matplotlib.pyplot as plt

然后我准备我的数据并拆分80%的训练集和20%的验证测试

# fix a seed for reproducing same results if we wish to train and evaluate our network more than once
seed = 9
np.random.seed(seed)

# load dataset
dataset = np.loadtxt('tr_set.csv', delimiter=',', skiprows=1)
# Show the first 10 rows
print(dataset[1:10])

# Delete the first column with the patient index

dataset = dataset[:,1:42]

# Split into input (features) and output variables
X = dataset[:,2:40]
Y = dataset[:,40]

# Counting elements in class 0 and in class 1
count_0 = 0
count_1 = 0

for i in Y:
    if i == 0:
        count_0 = count_0 + 1
    if i == 1:
        count_1 = count_1 + 1

print("Number of elements in 0 class:", count_0)
print("Number of elements in 1 class:", count_1)

# The dataset is balanced

# Split into training set(80%) and validation set (20%)
(X_train, X_val, Y_train, Y_val) = train_test_split(X, Y, test_size=0.2, random_state=seed)

在这里,由于使用Conv1D,我重塑了X_train和X_val之后,我的模型

# Create the model
opt = SGD(lr=0.00001)
model = Sequential()
model.add(Dense(1024, activation='relu', kernel_initializer='random_uniform', input_shape=(1,38)))
model.add(BatchNormalization()) # It is used to normalize the input layer by adjusting and scaling the activations.
model.add(Dense(512, activation='relu'))
model.add(Dense(256, activation='relu'))
model.add(Dense(128, activation='relu'))
model.summary()
model.add(Conv1D(64, 3, padding="same", activation="relu"))
# model.add(MaxPooling1D(2))
model.summary()
model.add(Dense(1, activation='sigmoid'))
model.summary()

# compile the model
model.compile(loss='binary_crossentropy', optimizer= opt, metrics=['accuracy'])

# fit the model
history = model.fit(X_train, Y_train, validation_data=(X_val, Y_val), epochs=15, batch_size=10)
# w_data = model.get_weights()

这是怎么回事,我删除了最大池,因为我在尺寸上遇到了问题(比如从1中减去2)?

0 个答案:

没有答案