CNN python的简单模型帮助

时间:2019-11-16 21:21:33

标签: python keras conv-neural-network

我真的在基本概念上挣扎。谁能帮助我建立一个仅包含两个Conv2D层和一个完全连接的层的简单模型。两个卷积层仅使用16个内核。因此,它将是Conv2D,Conv2D,完全,完全,softmax。该项目将检测八种不同类型的树木。谢谢如果我的问题很愚蠢或没有道理,我会继续尝试。谢谢

%matplotlib inline

import pandas as pd
import numpy as np
from glob import glob
import matplotlib.pyplot as plt

from keras.models import Sequential
from keras.preprocessing import image
from keras.layers import Dense, InputLayer, Conv2D, MaxPool2D, Flatten

from sklearn.model_selection import train_test_split


# To stop potential randomness
seed = 42
rng = np.random.RandomState(seed)

data = pd.read_csv('../datasets/Tree_classification/classification.csv')

# load images and store it in numpy array
X = []
for img_name in data.image_names:
    img = plt.imread('../datasets/classification/images/' + img_name)
    X.append(img)

X=np.array(X)

# create target
y = data.Tree_or_not.values

X.shape

X = X / X.max()

X_train, X_valid, Y_train, Y_valid=train_test_split(X,y,test_size=0.3, random_state=42)

model = Sequential()

model.add(InputLayer(input_shape=(245, 245, 3)))

model.add(Conv2D(16, (3, 3), activation='relu', strides=(1, 1), padding='valid'))
model.add(Conv2D(16, (3, 3), activation='relu', strides=(1, 1), padding='valid'))

model.add(Dense(units=128, activation='sigmoid'))
model.add(Dense(units=9, activation='sigmoid'))


model.compile(loss='binary_crossentropy', optimizer="adam", metrics=['accuracy'])

model.fit(X_train, Y_train, epochs=50, validation_data=(X_valid,Y_valid))

2 个答案:

答案 0 :(得分:0)

使用Keras文档https://keras.io/examples/cifar10_cnn/中的CNN来查看示例可能会很有用。特别要注意,在最终的Dense层之前使用Flatten()层。您可能会忽略示例的“ data_augmentation”部分。另外,您始终可以使用“ model.summary()”来查看构建模型时所使用的模型体系结构。我希望这会有所帮助。

答案 1 :(得分:0)

运行它会发生什么?快速浏览一下,我可以说:1)在batch_size=24中添加model.fit(),2)在最后一个密集层中使用'softmax'激活功能,3)使用'relu'激活功能在第一个密集层中,4)使用'categorical_crossentropy'作为损失函数。