编程要求:
填写 python 代码,在 Begin-End 段中构建出如下结构的卷积神经网络:
测试说明:
只需按要求构建模型即可,程序内部会使用你所构建的模型进行训练与预测,当预测准确率高于 95% 时,视为过关。
代码如下:
from keras.models import Sequential
from keras.layers import Conv2D, MaxPool2D, Flatten, Dense
import numpy as np
# 设置随机种子
np.random.seed(1447)
def build_model():
'''
在Begin-End段中构建出如下结构的卷积神经网络
1.64个5*5的卷积核组成的卷积层,激活函数为relu
2.最大池化层,池化核大小为2*2
3.扁平
4.128个神经元的全连接层,激活函数为relu
5.10个神经元的全连接层,激活函数为softmax
:return: 构建好的模型
'''
model = Sequential()
model.add(Conv2D(32, (5, 5), activation='relu', input_shape=[28, 28, 1]))
#********* Begin *********#
model.add(Conv2D(64, kernel_size=5, activation='relu'))
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(10, activation='softmax'))
#********* End *********#
return model
编程要求:
填写 python 代码,在 Begin-End 段中构建出如下结构的循环神经网络:
测试说明:
只需按要求构建模型即可,程序内部会使用你所构建的模型进行训练与预测,当预测准确率高于 70% 时,视为过关。
代码如下:
from keras.models import Sequential
from keras.layers import Embedding, SimpleRNN, Dense
def build_model():
'''
在Begin-End段中构建如下结构的循环神经网络
1.有30个神经元的SimpleRNN层
2.有16个神经元的全连接层,激活函数为relu
3.有1个神经元的全连接层,激活函数为sigmoid
:return: 构建好的模型
'''
model = Sequential()
model.add(Embedding(1000, 64))
#********* Begin *********#
model.add(SimpleRNN(30))
model.add(Dense(units=16, activation='relu'))
model.add(Dense(units=1, activation='sigmoid'))
#********* End *********#
return model
编程要求:
在 Begin-End 段中填写 Python 代码,实现猫狗分类。
测试说明:
补全代码即可,程序内部会使用你所构建的模型进行训练与预测,当预测准确率高于 70% 时,视为过关。
代码如下:
from keras.layers import Dense, Activation, Flatten, Dropout, Conv2D, MaxPooling2D
import keras
import os
import numpy as np
import cv2
# 设置随机种子
np.random.seed(1447)
IMAGE_HEIGHT = 128
IMAGE_WIDTH = 128
def get_train_data(data_path):
'''
读取并处理数据
:return:处理好的图像和对应的one-hot编码
'''
images = []
onehot = np.zeros((500, 2))
#********* Begin *********#
for i, img_name in enumerate(os.listdir(data_path)):
if 'cat' in img_name:
onehot[i, 0] = 1
else:
onehot[i, 1] = 1
img = cv2.imread(os.path.join(data_path, img_name))
img = cv2.resize(img, (IMAGE_HEIGHT, IMAGE_WIDTH))
img = img / 255.0
images.append(img)
#********* End *********#
return np.array(images), onehot
def build_model():
'''
构建模型
:return:构建好的模型
'''
model = keras.Sequential()
#********* Begin *********#
model.add(Conv2D(32, kernel_size=3, activation='relu', input_shape=[IMAGE_HEIGHT, IMAGE_WIDTH, 3]))
model.add(MaxPooling2D(pool_size=2))
model.add(Conv2D(32, kernel_size=3, activation='relu'))
model.add(MaxPooling2D(pool_size=2))
model.add(Flatten())
model.add(Dense(96, activation='relu'))
model.add(Dense(2, activation='softmax'))
#********* End *********#
return model
def fit_and_predict(model, train_images, onehot, test_images):
'''
训练模型,并对测试图像进行预测
:param model: 训练好的模型
:param train_images: 训练集图像
:param onehot: 训练集的one-hot编码
:param test_images: 测试集图像
:return: 预测结果
'''
#********* Begin *********#
# 编译模型
model.compile(loss='categorical_crossentropy', optimizer=keras.optimizers.Adam(lr=0.0001), metrics=['accuracy'])
#********* End *********#
model.fit(train_images, onehot, epochs=20, batch_size=32, verbose=0)
result = model.predict(test_images, batch_size=10)
predict_idx = np.argmax(result, axis=1)
return predict_idx