Aerial Cactus Identification(空中仙人掌鉴定)

2024-05-24 22:48

本文主要是介绍Aerial Cactus Identification(空中仙人掌鉴定),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Aerial Cactus Identification 空中仙人掌鉴定

二分类问题

方案一:

import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import os,cv2
from IPython.display import Image
from keras.preprocessing import image
from keras import optimizers
from keras import layers,models
from keras.applications.imagenet_utils import preprocess_input
import matplotlib.pyplot as plt
import seaborn as sns
from keras import regularizers
from keras.preprocessing.image import ImageDataGenerator
from keras.applications.vgg16 import VGG16import numpy as nptrain_path=r'.\input\train'
test_path=r'.\input\test'
train=pd.read_csv(r'.\input\train.csv')
test_df=pd.read_csv(r'.\input\sample_submission.csv')
train.has_cactus=train.has_cactus.astype(str)#Data preparation
datagen=ImageDataGenerator(rescale=1./255)
batch_size=150train_generator=datagen.flow_from_dataframe(dataframe=train[:15001],directory=train_path,x_col='id',y_col='has_cactus',class_mode='binary',batch_size=batch_size,target_size=(150,150))validation_generator=datagen.flow_from_dataframe(dataframe=train[15000:],directory=train_path,x_col='id',y_col='has_cactus',class_mode='binary',batch_size=50,target_size=(150,150))def cnn_model():model=models.Sequential()model.add(layers.Conv2D(32,(3,3),activation='relu',input_shape=(150,150,3)))model.add(layers.MaxPool2D((2,2)))model.add(layers.Conv2D(64,(3,3),activation='relu',input_shape=(150,150,3)))model.add(layers.MaxPool2D((2,2)))model.add(layers.Conv2D(128,(3,3),activation='relu',input_shape=(150,150,3)))model.add(layers.MaxPool2D((2,2)))model.add(layers.Conv2D(128,(3,3),activation='relu',input_shape=(150,150,3)))model.add(layers.MaxPool2D((2,2)))model.add(layers.Flatten())model.add(layers.Dense(512,activation='relu'))model.add(layers.Dense(1,activation='sigmoid'))model.compile(loss='binary_crossentropy',optimizer=optimizers.rmsprop(),metrics=['acc'])epochs=100history=model.fit_generator(train_generator,steps_per_epoch=100,epochs=epochs,validation_data=validation_generator,validation_steps=50)X_tst = []Test_imgs = []for img_id in os.listdir(test_path):X_tst.append(cv2.imread(os.path.join(test_path,img_id)))Test_imgs.append(img_id)X_tst = np.asarray(X_tst)X_tst = X_tst.astype('float32')X_tst /= 255test_predictions = model.predict(X_tst)sub_df = pd.DataFrame(test_predictions, columns=['has_cactus'])sub_df['has_cactus'] = sub_df['has_cactus'].apply(lambda x: 1 if x > 0.75 else 0)sub_df['id'] = ''cols = sub_df.columns.tolist()cols = cols[-1:] + cols[:-1]sub_df=sub_df[cols]for i, img in enumerate(Test_imgs):sub_df.set_value(i,'id',img)sub_df.to_csv('result2.csv',index=False)def vgg16_model():passif __name__=='__main__':cnn_model()

方案二:VGG16迁移学习

import cv2
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import json
import os
from tqdm import tqdm, tqdm_notebook
from keras.models import Sequential
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.applications import VGG16
from keras.optimizers import Adam
import ostrain_path=r'.\input\train'
test_path=r'.\input\test'
train_df=pd.read_csv(r'.\input\train.csv')
test_df=pd.read_csv(r'.\input\sample_submission.csv')vgg16_net = VGG16(weights='imagenet',include_top=False,input_shape=(32, 32, 3))vgg16_net.trainable=Falsemodel = Sequential()
model.add(vgg16_net)
model.add(Flatten())
model.add(Dense(256))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))model.compile(loss='binary_crossentropy',optimizer=Adam(lr=1e-5),metrics=['accuracy'])X_tr = []
Y_tr = []
imges = train_df['id'].values
for img_id in imges:X_tr.append(cv2.imread(os.path.join(train_path,img_id)))Y_tr.append(train_df[train_df['id'] == img_id]['has_cactus'].values[0])
X_tr = np.asarray(X_tr)
X_tr = X_tr.astype('float32')
X_tr /= 255
Y_tr = np.asarray(Y_tr)batch_size = 32
nb_epoch = 1000history = model.fit(X_tr, Y_tr,batch_size=batch_size,epochs=nb_epoch,validation_split=0.1,shuffle=True,verbose=2)"""
with open('history.json', 'w') as f:json.dump(history.history, f)history_df = pd.DataFrame(history.history)
history_df[['loss', 'val_loss']].plot()
history_df[['acc', 'val_acc']].plot()
plt.show()
"""X_tst = []
Test_imgs = []
for img_id in os.listdir(test_path):X_tst.append(cv2.imread(os.path.join(test_path,img_id)))Test_imgs.append(img_id)
X_tst = np.asarray(X_tst)
X_tst = X_tst.astype('float32')
X_tst /= 255test_predictions = model.predict(X_tst)sub_df = pd.DataFrame(test_predictions, columns=['has_cactus'])
sub_df['has_cactus'] = sub_df['has_cactus'].apply(lambda x: 1 if x > 0.75 else 0)sub_df['id'] = ''
cols = sub_df.columns.tolist()
cols = cols[-1:] + cols[:-1]
sub_df=sub_df[cols]
for i, img in enumerate(Test_imgs):sub_df.set_value(i,'id',img)sub_df.to_csv('result2.csv',index=False)

我的方案:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import seaborn as sns
import itertools
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrixfrom keras.utils.np_utils import to_categorical # convert to one-hot-encoding
from keras.models import Sequential
from keras.models import load_model
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D
from keras.optimizers import RMSprop
from keras.preprocessing.image import ImageDataGenerator
from keras.callbacks import ReduceLROnPlateau
import cv2
import os
from keras.callbacks import EarlyStoppingtrain_path=r'.\input\train'
test_path=r'.\input\test'
train_df=pd.read_csv(r'.\input\train.csv')
test_df=pd.read_csv(r'.\input\sample_submission.csv')X_train=[]
Y_train=[]
for i in range(len(train_df)):img_path=os.path.join(train_path,train_df.id[i])image=np.array(cv2.imread(img_path))X_train.append(image)Y_train.append(train_df.has_cactus[i])X_train=np.array(X_train)/255.0
Y_train=np.array(Y_train)
Y_train=to_categorical(Y_train,num_classes=2)
# Set the random seed
random_seed = 2# Split the train and the validation set for the fitting
X_train, X_val, Y_train, Y_val = train_test_split(X_train, Y_train, test_size = 0.1, random_state=random_seed)model_name='cnn_model.h5'
def train():# Define the modelmodel = Sequential()model.add(Conv2D(filters=32, kernel_size=(5, 5), padding='Same',activation='relu', input_shape=(32, 32, 3)))model.add(Conv2D(filters=32, kernel_size=(5, 5), padding='Same',activation='relu'))model.add(MaxPool2D(pool_size=(2, 2)))model.add(Dropout(0.25))model.add(Conv2D(filters=64, kernel_size=(3, 3), padding='Same',activation='relu'))model.add(Conv2D(filters=64, kernel_size=(3, 3), padding='Same',activation='relu'))model.add(MaxPool2D(pool_size=(2, 2), strides=(2, 2)))model.add(Dropout(0.25))model.add(Flatten())model.add(Dense(256, activation="relu"))model.add(Dropout(0.5))model.add(Dense(2, activation="softmax"))print(model.summary())# Define the optimizeroptimizer = RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0)# Compile the modelmodel.compile(optimizer=optimizer, loss="categorical_crossentropy", metrics=["accuracy"])# Set a learning rate annealerlearning_rate_reduction = ReduceLROnPlateau(monitor='val_acc',patience=3,verbose=1,factor=0.5,min_lr=0.00001)epochs = 300  # Turn epochs to 30 to get 0.9967 accuracybatch_size = 32# Data augmentationdatagen = ImageDataGenerator(featurewise_center=False,  # set input mean to 0 over the datasetsamplewise_center=False,  # set each sample mean to 0featurewise_std_normalization=False,  # divide inputs by std of the datasetsamplewise_std_normalization=False,  # divide each input by its stdzca_whitening=False,  # apply ZCA whiteningrotation_range=10,  # randomly rotate images in the range (degrees, 0 to 180)zoom_range=0.1,  # Randomly zoom imagewidth_shift_range=0.1,  # randomly shift images horizontally (fraction of total width)height_shift_range=0.1,  # randomly shift images vertically (fraction of total height)horizontal_flip=False,  # randomly flip imagesvertical_flip=False)  # randomly flip imagesdatagen.fit(X_train)el = EarlyStopping(min_delta=0.001, patience=5)# Fit the modelhistory = model.fit_generator(datagen.flow(X_train, Y_train, batch_size=batch_size),epochs=epochs, validation_data=(X_val, Y_val),verbose=2, steps_per_epoch=X_train.shape[0] // batch_size, callbacks=[learning_rate_reduction,el])model.save(model_name)# Plot the loss and accuracy curves for training and validationfig, ax = plt.subplots(2, 1)ax[0].plot(history.history['loss'], color='b', label="Training loss")ax[0].plot(history.history['val_loss'], color='r', label="validation loss", axes=ax[0])legend = ax[0].legend(loc='best', shadow=True)ax[1].plot(history.history['acc'], color='b', label="Training accuracy")ax[1].plot(history.history['val_acc'], color='r', label="Validation accuracy")legend = ax[1].legend(loc='best', shadow=True)plt.show()def test():X_test=[]for i in range(len(test_df)):img_path = os.path.join(test_path, test_df.id[i])image = np.array(cv2.imread(img_path))X_test.append(image)X_test = np.array(X_test) / 255.0model=load_model(model_name)Y_pred=model.predict(X_test)Y_pred=np.argmax(Y_pred,axis=1)test_df.has_cactus=Y_predtest_df.to_csv('result.csv',index=False)if __name__=='__main__':test()

这篇关于Aerial Cactus Identification(空中仙人掌鉴定)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/999753

相关文章

天然药物化学史话:“四大光谱”在天然产物结构鉴定中的应用-文献精读46

天然药物化学史话:“四大光谱”在天然产物结构鉴定中的应用,天然产物化学及其生物合成必备基础知识~ 摘要 天然产物化学研究在药物研发中起着非常重要的作用,结构研究又是天然产物化学研究中最重要的工作之一。在天然药物化学史话系列文章的基础上,对在天然产物结构研究中起绝对主导作用的“四大光谱”分析技术,即红外光谱、紫外光谱、质谱、核磁共振波谱在天然产物结构鉴定中的应用历史进行回顾与总结,并对其发展

Linux - SSH: WARNING REMOTE HOST IDENTIFICATION HAS CHANGED

一、问题     通过 SSH 登录节点时遇到的问题 二、方案     通过 vi ~/.ssh/known_hosts 删除对应节点 ip 的 rsa 信息即可

POJ 2793 Cactus

题意: 给你一幅无向图  计算它有多少生成子图是仙人掌  如果它本身不是仙人掌输出0 思路: 无向图的仙人掌是一个连通图且一条边最多在一个环上 对于这道题  需要区分“生成子图”和“导出子图”的概念 生成子图:包含G的所有顶点V和其中一些边的子图 导出子图:选择G中一些点组成集合V',将E中所有两端点在V'中的边全部找出形成的子图叫点导出子图;选择G中一些边组成集合E',将V中所有与E

ssh_exchange_identification: read: Connection reset by peer

最近为了抢自如的房子在京东云服务器上面跑爬虫脚本,今天突然无法登陆了,ssh 连接报错ssh_exchange_identification: read: Connection reset by peer,经过检查,我的 ip 被 deny 了. 要解决此问题,请进行如下配置检查和修改: 通过 云服务器控制台的管理终端 进入系统。 通过 cat 等指令查看 /etc/hosts.deny中是

Java编程基础之运行期类型鉴定

1、Class对象 为理解RTTI在Java里如何工作,首先必须了解类型信息在运行期是如何表示的。这时要用到一个名为“Class对象”的特殊形式的对象,其中包含了与类有关的信息(有时也把它叫作“元类”)。事实上,我们要用Class对象创建属于某个类的全部“常规”或“普通”对象。 对于作为程序一部分的每个类,它们都有一个Class对象。换言之,每次写一个新类时,同时也会创建一个Class对象(更恰当

【git之窗】(十八)WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

今天在拉取远程分支时,提示我这个: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

SSH 远程登录报错:kex_exchange_identification: Connection closed.....

一  问题起因         在公司,使用ssh登录远程服务器。有一天,mac终端提示:`kex_exchange_identification: Connection closed by remote host Connection closed by UNKNOWN port 65535`。 不知道为啥会出现这样的情形,最近这段时间登录都是正常的,不知道哪里抽风了,就提示这个。 二

对讲模块升级的重要性-OTA空中升级与串口升级

在现代通信设备的设计中,灵活的升级能力已成为评估模块性能的重要标准。无论是在开发过程中,还是在产品的生命周期内,支持OTA和串口升级的模块可以极大地提高设备的可维护性和适应性。 SA618F30,作为一款高性价比、高集成度的大功率全双工无线音频模块,不仅在语音通信领域表现出色,还通过支持OTA和串口升级,进一步增强了其在各类应用场景中的竞争力。 OTA升级:远程维护与持续优化 OTA升级

电商分账系统整个原理 空中分账具体解决方案

电商分账系统最近比较火,比如大家做天猫的时候,直接可以通过网商贷把钱拿出来,但抖店没有这种贷款,大家都有一种不想进对公的方式,那系统本身就是虚拟户加操作系统,虚拟户是银行开的,银行开就需要有业务场景的报备才能进件。 如果我们只是把分账系统当转账用,是会有一定风险的,如果说我们通过一些合理的业务逻辑去分,它的价值就非常大了。举个例子,就比如说一个连锁企业,线下的门店会遇到一个问题,大家日子都不

Kaggle-Camera_Model_Identification 比赛记录总结[19/582(Top 4%)]

这篇博客记录自己在这次kaggle比赛中做的工作。成绩:19/582(Top 4%) Kaggle比赛地址 我的代码github地址 这次比赛是给出10个相机拍摄的照片,然后给出测试图片,区分是哪个相机拍摄的。训练集中每类照片数量相同,每类都是由同一个手机拍摄的照片。测试集中,每类的照片都是来自另外一个手机,一半的图片可能被用了八种可能的操作。 总结: 1. 更多的数据。