├── README.md ├── ANN └── ann.py ├── LICENSE └── Image Classification Using SVM.ipynb /README.md: -------------------------------------------------------------------------------- 1 | # Complete-Deep-Learning -------------------------------------------------------------------------------- /ANN/ann.py: -------------------------------------------------------------------------------- 1 | # Artificial Neural Network 2 | 3 | 4 | # Part 1 - Data Preprocessing 5 | 6 | # Importing the libraries 7 | import numpy as np 8 | import matplotlib.pyplot as plt 9 | import pandas as pd 10 | 11 | # Importing the dataset 12 | dataset = pd.read_csv('Churn_Modelling.csv') 13 | X = dataset.iloc[:, 3:13] 14 | y = dataset.iloc[:, 13] 15 | 16 | #Create dummy variables 17 | geography=pd.get_dummies(X["Geography"],drop_first=True) 18 | gender=pd.get_dummies(X['Gender'],drop_first=True) 19 | 20 | ## Concatenate the Data Frames 21 | 22 | X=pd.concat([X,geography,gender],axis=1) 23 | 24 | ## Drop Unnecessary columns 25 | X=X.drop(['Geography','Gender'],axis=1) 26 | 27 | # Splitting the dataset into the Training set and Test set 28 | from sklearn.model_selection import train_test_split 29 | X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0) 30 | 31 | # Feature Scaling 32 | from sklearn.preprocessing import StandardScaler 33 | sc = StandardScaler() 34 | X_train = sc.fit_transform(X_train) 35 | X_test = sc.transform(X_test) 36 | 37 | # Part 2 - Now let's make the ANN! 38 | 39 | # Importing the Keras libraries and packages 40 | import keras 41 | from keras.models import Sequential 42 | from keras.layers import Dense 43 | from keras.layers import LeakyReLU,PReLU,ELU 44 | from keras.layers import Dropout 45 | 46 | 47 | # Initialising the ANN 48 | classifier = Sequential() 49 | 50 | # Adding the input layer and the first hidden layer 51 | classifier.add(Dense(output_dim = 6, init = 'he_uniform',activation='relu',input_dim = 11)) 52 | 53 | # Adding the second hidden layer 54 | classifier.add(Dense(output_dim = 6, init = 'he_uniform',activation='relu')) 55 | # Adding the output layer 56 | classifier.add(Dense(output_dim = 1, init = 'glorot_uniform', activation = 'sigmoid')) 57 | 58 | # Compiling the ANN 59 | classifier.compile(optimizer = 'Adamax', loss = 'binary_crossentropy', metrics = ['accuracy']) 60 | 61 | # Fitting the ANN to the Training set 62 | model_history=classifier.fit(X_train, y_train,validation_split=0.33, batch_size = 10, nb_epoch = 100) 63 | 64 | # list all data in history 65 | 66 | print(model_history.history.keys()) 67 | # summarize history for accuracy 68 | plt.plot(model_history.history['acc']) 69 | plt.plot(model_history.history['val_acc']) 70 | plt.title('model accuracy') 71 | plt.ylabel('accuracy') 72 | plt.xlabel('epoch') 73 | plt.legend(['train', 'test'], loc='upper left') 74 | plt.show() 75 | 76 | # summarize history for loss 77 | plt.plot(model_history.history['loss']) 78 | plt.plot(model_history.history['val_loss']) 79 | plt.title('model loss') 80 | plt.ylabel('loss') 81 | plt.xlabel('epoch') 82 | plt.legend(['train', 'test'], loc='upper left') 83 | plt.show() 84 | 85 | # Part 3 - Making the predictions and evaluating the model 86 | 87 | # Predicting the Test set results 88 | y_pred = classifier.predict(X_test) 89 | y_pred = (y_pred > 0.5) 90 | 91 | # Making the Confusion Matrix 92 | from sklearn.metrics import confusion_matrix 93 | cm = confusion_matrix(y_test, y_pred) 94 | 95 | # Calculate the Accuracy 96 | from sklearn.metrics import accuracy_score 97 | score=accuracy_score(y_pred,y_test) 98 | 99 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /Image Classification Using SVM.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## Convolutional Neural Network Using SVM as Final Layer" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "### Understanding Of SVM\n", 15 | "\n", 16 | "- Part 1: https://www.youtube.com/watch?v=H9yACitf-KM\n", 17 | "- Part 2: https://www.youtube.com/watch?v=Js3GLb1xPhc" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 1, 23 | "metadata": {}, 24 | "outputs": [], 25 | "source": [ 26 | "from tensorflow.compat.v1 import ConfigProto\n", 27 | "from tensorflow.compat.v1 import InteractiveSession\n", 28 | "\n", 29 | "config = ConfigProto()\n", 30 | "config.gpu_options.per_process_gpu_memory_fraction = 0.5\n", 31 | "config.gpu_options.allow_growth = True\n", 32 | "session = InteractiveSession(config=config)" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": 2, 38 | "metadata": {}, 39 | "outputs": [], 40 | "source": [ 41 | "# Convolutional Neural Network\n", 42 | "\n", 43 | "# Importing the libraries\n", 44 | "import tensorflow as tf\n", 45 | "from tensorflow.keras.preprocessing.image import ImageDataGenerator" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": 3, 51 | "metadata": {}, 52 | "outputs": [ 53 | { 54 | "data": { 55 | "text/plain": [ 56 | "'2.2.0'" 57 | ] 58 | }, 59 | "execution_count": 3, 60 | "metadata": {}, 61 | "output_type": "execute_result" 62 | } 63 | ], 64 | "source": [ 65 | "tf.__version__" 66 | ] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "execution_count": 4, 71 | "metadata": {}, 72 | "outputs": [], 73 | "source": [ 74 | "# Part 1 - Data Preprocessing\n", 75 | "\n", 76 | "# Preprocessing the Training set\n", 77 | "train_datagen = ImageDataGenerator(rescale = 1./255,\n", 78 | " shear_range = 0.2,\n", 79 | " zoom_range = 0.2,\n", 80 | " horizontal_flip = True)\n" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": 5, 86 | "metadata": {}, 87 | "outputs": [ 88 | { 89 | "name": "stdout", 90 | "output_type": "stream", 91 | "text": [ 92 | "Found 8000 images belonging to 2 classes.\n", 93 | "Found 2000 images belonging to 2 classes.\n" 94 | ] 95 | } 96 | ], 97 | "source": [ 98 | "training_set = train_datagen.flow_from_directory('Datasets/train',\n", 99 | " target_size = (64, 64),\n", 100 | " batch_size = 32,\n", 101 | " class_mode = 'binary')\n", 102 | "\n", 103 | "# Preprocessing the Test set\n", 104 | "test_datagen = ImageDataGenerator(rescale = 1./255)\n", 105 | "test_set = test_datagen.flow_from_directory('Datasets/test',\n", 106 | " target_size = (64, 64),\n", 107 | " batch_size = 32,\n", 108 | " class_mode = 'binary')" 109 | ] 110 | }, 111 | { 112 | "cell_type": "code", 113 | "execution_count": 6, 114 | "metadata": {}, 115 | "outputs": [], 116 | "source": [ 117 | "from tensorflow.keras.layers import Conv2D\n", 118 | "from tensorflow.keras.layers import Dense" 119 | ] 120 | }, 121 | { 122 | "cell_type": "code", 123 | "execution_count": 7, 124 | "metadata": {}, 125 | "outputs": [], 126 | "source": [ 127 | "from tensorflow.keras.regularizers import l2" 128 | ] 129 | }, 130 | { 131 | "cell_type": "code", 132 | "execution_count": 7, 133 | "metadata": {}, 134 | "outputs": [], 135 | "source": [ 136 | "# Part 2 - Building the CNN\n", 137 | "# Initialising the CNN\n", 138 | "cnn = tf.keras.models.Sequential()\n", 139 | "\n", 140 | "# Step 1 - Convolution\n", 141 | "cnn.add(tf.keras.layers.Conv2D(filters=32,padding=\"same\",kernel_size=3, activation='relu', strides=2, input_shape=[64, 64, 3]))\n", 142 | "\n", 143 | "# Step 2 - Pooling\n", 144 | "cnn.add(tf.keras.layers.MaxPool2D(pool_size=2, strides=2))\n", 145 | "\n", 146 | "# Adding a second convolutional layer\n", 147 | "cnn.add(tf.keras.layers.Conv2D(filters=32,padding='same',kernel_size=3, activation='relu'))\n", 148 | "cnn.add(tf.keras.layers.MaxPool2D(pool_size=2, strides=2))\n", 149 | "\n", 150 | "# Step 3 - Flattening\n", 151 | "cnn.add(tf.keras.layers.Flatten())\n", 152 | "\n", 153 | "# Step 4 - Full Connection\n", 154 | "cnn.add(tf.keras.layers.Dense(units=128, activation='relu'))\n", 155 | "\n", 156 | "# Step 5 - Output Layer\n", 157 | "#cnn.add(tf.keras.layers.Dense(units=1, activation='sigmoid'))\n", 158 | "## For Binary Classification\n", 159 | "cnn.add(Dense(1, kernel_regularizer=tf.keras.regularizers.l2(0.01),activation\n", 160 | " ='linear'))" 161 | ] 162 | }, 163 | { 164 | "cell_type": "code", 165 | "execution_count": null, 166 | "metadata": {}, 167 | "outputs": [], 168 | "source": [ 169 | "## for mulitclassification\n", 170 | "cnn.add(Dense(4, kernel_regularizer=tf.keras.regularizers.l2(0.01),activation\n", 171 | " ='softmax'))\n", 172 | "cnn.compile(optimizer = 'adam', loss = 'squared_hinge', metrics = ['accuracy'])" 173 | ] 174 | }, 175 | { 176 | "cell_type": "code", 177 | "execution_count": 8, 178 | "metadata": {}, 179 | "outputs": [ 180 | { 181 | "name": "stdout", 182 | "output_type": "stream", 183 | "text": [ 184 | "Model: \"sequential\"\n", 185 | "_________________________________________________________________\n", 186 | "Layer (type) Output Shape Param # \n", 187 | "=================================================================\n", 188 | "conv2d (Conv2D) (None, 32, 32, 32) 896 \n", 189 | "_________________________________________________________________\n", 190 | "max_pooling2d (MaxPooling2D) (None, 16, 16, 32) 0 \n", 191 | "_________________________________________________________________\n", 192 | "conv2d_1 (Conv2D) (None, 16, 16, 32) 9248 \n", 193 | "_________________________________________________________________\n", 194 | "max_pooling2d_1 (MaxPooling2 (None, 8, 8, 32) 0 \n", 195 | "_________________________________________________________________\n", 196 | "flatten (Flatten) (None, 2048) 0 \n", 197 | "_________________________________________________________________\n", 198 | "dense (Dense) (None, 128) 262272 \n", 199 | "_________________________________________________________________\n", 200 | "dense_1 (Dense) (None, 1) 129 \n", 201 | "=================================================================\n", 202 | "Total params: 272,545\n", 203 | "Trainable params: 272,545\n", 204 | "Non-trainable params: 0\n", 205 | "_________________________________________________________________\n" 206 | ] 207 | } 208 | ], 209 | "source": [ 210 | "cnn.summary()" 211 | ] 212 | }, 213 | { 214 | "cell_type": "code", 215 | "execution_count": 9, 216 | "metadata": { 217 | "scrolled": true 218 | }, 219 | "outputs": [ 220 | { 221 | "name": "stdout", 222 | "output_type": "stream", 223 | "text": [ 224 | "Epoch 1/15\n", 225 | "250/250 [==============================] - 15s 58ms/step - loss: 0.8911 - accuracy: 0.5706 - val_loss: 0.9147 - val_accuracy: 0.6195\n", 226 | "Epoch 2/15\n", 227 | "250/250 [==============================] - 14s 56ms/step - loss: 0.7251 - accuracy: 0.6611 - val_loss: 0.6736 - val_accuracy: 0.6765\n", 228 | "Epoch 3/15\n", 229 | "250/250 [==============================] - 14s 56ms/step - loss: 0.6664 - accuracy: 0.6935 - val_loss: 0.6522 - val_accuracy: 0.6750\n", 230 | "Epoch 4/15\n", 231 | "250/250 [==============================] - 14s 56ms/step - loss: 0.6154 - accuracy: 0.7179 - val_loss: 0.7462 - val_accuracy: 0.7195\n", 232 | "Epoch 5/15\n", 233 | "250/250 [==============================] - 14s 56ms/step - loss: 0.5937 - accuracy: 0.7272 - val_loss: 0.5680 - val_accuracy: 0.7655\n", 234 | "Epoch 6/15\n", 235 | "250/250 [==============================] - 14s 56ms/step - loss: 0.5608 - accuracy: 0.7408 - val_loss: 0.5924 - val_accuracy: 0.7690\n", 236 | "Epoch 7/15\n", 237 | "250/250 [==============================] - 14s 56ms/step - loss: 0.5497 - accuracy: 0.7483 - val_loss: 0.5979 - val_accuracy: 0.7590\n", 238 | "Epoch 8/15\n", 239 | "250/250 [==============================] - 14s 56ms/step - loss: 0.5414 - accuracy: 0.7484 - val_loss: 0.6206 - val_accuracy: 0.7655\n", 240 | "Epoch 9/15\n", 241 | "250/250 [==============================] - 14s 56ms/step - loss: 0.5317 - accuracy: 0.7551 - val_loss: 0.6008 - val_accuracy: 0.7795\n", 242 | "Epoch 10/15\n", 243 | "250/250 [==============================] - 14s 56ms/step - loss: 0.5172 - accuracy: 0.7629 - val_loss: 0.5014 - val_accuracy: 0.7840\n", 244 | "Epoch 11/15\n", 245 | "250/250 [==============================] - 14s 56ms/step - loss: 0.5146 - accuracy: 0.7657 - val_loss: 0.5078 - val_accuracy: 0.7790\n", 246 | "Epoch 12/15\n", 247 | "250/250 [==============================] - 14s 56ms/step - loss: 0.5037 - accuracy: 0.7696 - val_loss: 0.5279 - val_accuracy: 0.7600\n", 248 | "Epoch 13/15\n", 249 | "250/250 [==============================] - 14s 55ms/step - loss: 0.4934 - accuracy: 0.7753 - val_loss: 0.5020 - val_accuracy: 0.7885\n", 250 | "Epoch 14/15\n", 251 | "250/250 [==============================] - 14s 56ms/step - loss: 0.4789 - accuracy: 0.7860 - val_loss: 0.5044 - val_accuracy: 0.7850\n", 252 | "Epoch 15/15\n", 253 | "250/250 [==============================] - 14s 56ms/step - loss: 0.4760 - accuracy: 0.7828 - val_loss: 0.4897 - val_accuracy: 0.7865\n" 254 | ] 255 | } 256 | ], 257 | "source": [ 258 | "# Part 3 - Training the CNN\n", 259 | "\n", 260 | "# Compiling the CNN\n", 261 | "cnn.compile(optimizer = 'adam', loss = 'hinge', metrics = ['accuracy'])\n", 262 | "\n", 263 | "# Training the CNN on the Training set and evaluating it on the Test set\n", 264 | "r=cnn.fit(x = training_set, validation_data = test_set, epochs = 15)" 265 | ] 266 | }, 267 | { 268 | "cell_type": "code", 269 | "execution_count": 10, 270 | "metadata": {}, 271 | "outputs": [ 272 | { 273 | "data": { 274 | "image/png": "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\n", 275 | "text/plain": [ 276 | "
" 277 | ] 278 | }, 279 | "metadata": { 280 | "needs_background": "light" 281 | }, 282 | "output_type": "display_data" 283 | }, 284 | { 285 | "data": { 286 | "image/png": "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\n", 287 | "text/plain": [ 288 | "
" 289 | ] 290 | }, 291 | "metadata": { 292 | "needs_background": "light" 293 | }, 294 | "output_type": "display_data" 295 | }, 296 | { 297 | "data": { 298 | "text/plain": [ 299 | "
" 300 | ] 301 | }, 302 | "metadata": {}, 303 | "output_type": "display_data" 304 | } 305 | ], 306 | "source": [ 307 | "# plot the loss\n", 308 | "import matplotlib.pyplot as plt\n", 309 | "plt.plot(r.history['loss'], label='train loss')\n", 310 | "plt.plot(r.history['val_loss'], label='val loss')\n", 311 | "plt.legend()\n", 312 | "plt.show()\n", 313 | "plt.savefig('LossVal_loss')\n", 314 | "\n", 315 | "# plot the accuracy\n", 316 | "plt.plot(r.history['accuracy'], label='train acc')\n", 317 | "plt.plot(r.history['val_accuracy'], label='val acc')\n", 318 | "plt.legend()\n", 319 | "plt.show()\n", 320 | "plt.savefig('AccVal_acc')" 321 | ] 322 | }, 323 | { 324 | "cell_type": "code", 325 | "execution_count": 11, 326 | "metadata": {}, 327 | "outputs": [], 328 | "source": [ 329 | "# save it as a h5 file\n", 330 | "\n", 331 | "\n", 332 | "from tensorflow.keras.models import load_model\n", 333 | "\n", 334 | "cnn.save('model_rcat_dog.h5')" 335 | ] 336 | }, 337 | { 338 | "cell_type": "code", 339 | "execution_count": 8, 340 | "metadata": {}, 341 | "outputs": [], 342 | "source": [ 343 | "from tensorflow.keras.models import load_model\n", 344 | " \n", 345 | "# load model\n", 346 | "model = load_model('model_rcat_dog.h5')" 347 | ] 348 | }, 349 | { 350 | "cell_type": "code", 351 | "execution_count": 11, 352 | "metadata": {}, 353 | "outputs": [ 354 | { 355 | "name": "stdout", 356 | "output_type": "stream", 357 | "text": [ 358 | "Model: \"sequential\"\n", 359 | "_________________________________________________________________\n", 360 | "Layer (type) Output Shape Param # \n", 361 | "=================================================================\n", 362 | "conv2d (Conv2D) (None, 62, 62, 32) 896 \n", 363 | "_________________________________________________________________\n", 364 | "max_pooling2d (MaxPooling2D) (None, 31, 31, 32) 0 \n", 365 | "_________________________________________________________________\n", 366 | "conv2d_1 (Conv2D) (None, 29, 29, 32) 9248 \n", 367 | "_________________________________________________________________\n", 368 | "max_pooling2d_1 (MaxPooling2 (None, 14, 14, 32) 0 \n", 369 | "_________________________________________________________________\n", 370 | "flatten (Flatten) (None, 6272) 0 \n", 371 | "_________________________________________________________________\n", 372 | "dense (Dense) (None, 128) 802944 \n", 373 | "_________________________________________________________________\n", 374 | "dense_1 (Dense) (None, 1) 129 \n", 375 | "=================================================================\n", 376 | "Total params: 813,217\n", 377 | "Trainable params: 813,217\n", 378 | "Non-trainable params: 0\n", 379 | "_________________________________________________________________\n" 380 | ] 381 | } 382 | ], 383 | "source": [ 384 | "model.summary()" 385 | ] 386 | }, 387 | { 388 | "cell_type": "code", 389 | "execution_count": 19, 390 | "metadata": {}, 391 | "outputs": [], 392 | "source": [ 393 | "# Part 4 - Making a single prediction\n", 394 | "\n", 395 | "import numpy as np\n", 396 | "from tensorflow.keras.preprocessing import image\n", 397 | "test_image = image.load_img('Datasets/test/dogs/dog.4015.jpg', target_size = (64,64))\n", 398 | "test_image = image.img_to_array(test_image)\n", 399 | "test_image=test_image/255\n", 400 | "test_image = np.expand_dims(test_image, axis = 0)\n", 401 | "result = cnn.predict(test_image)" 402 | ] 403 | }, 404 | { 405 | "cell_type": "code", 406 | "execution_count": 20, 407 | "metadata": {}, 408 | "outputs": [ 409 | { 410 | "data": { 411 | "text/plain": [ 412 | "array([[2.13195]], dtype=float32)" 413 | ] 414 | }, 415 | "execution_count": 20, 416 | "metadata": {}, 417 | "output_type": "execute_result" 418 | } 419 | ], 420 | "source": [ 421 | "result" 422 | ] 423 | }, 424 | { 425 | "cell_type": "code", 426 | "execution_count": 14, 427 | "metadata": {}, 428 | "outputs": [], 429 | "source": [ 430 | "# Part 4 - Making a single prediction\n", 431 | "\n", 432 | "import numpy as np\n", 433 | "from tensorflow.keras.preprocessing import image\n", 434 | "test_image = image.load_img('Datasets/test/cats/cat.4017.jpg', target_size = (64,64))\n", 435 | "test_image = image.img_to_array(test_image)\n", 436 | "test_image=test_image/255\n", 437 | "test_image = np.expand_dims(test_image, axis = 0)\n", 438 | "result = cnn.predict(test_image)" 439 | ] 440 | }, 441 | { 442 | "cell_type": "code", 443 | "execution_count": 15, 444 | "metadata": {}, 445 | "outputs": [ 446 | { 447 | "data": { 448 | "text/plain": [ 449 | "array([[-0.4654408]], dtype=float32)" 450 | ] 451 | }, 452 | "execution_count": 15, 453 | "metadata": {}, 454 | "output_type": "execute_result" 455 | } 456 | ], 457 | "source": [ 458 | "result" 459 | ] 460 | }, 461 | { 462 | "cell_type": "code", 463 | "execution_count": 21, 464 | "metadata": {}, 465 | "outputs": [ 466 | { 467 | "name": "stdout", 468 | "output_type": "stream", 469 | "text": [ 470 | "The image classified is dog\n" 471 | ] 472 | } 473 | ], 474 | "source": [ 475 | "if result[0]<0:\n", 476 | " print(\"The image classified is cat\")\n", 477 | "else:\n", 478 | " print(\"The image classified is dog\")" 479 | ] 480 | }, 481 | { 482 | "cell_type": "code", 483 | "execution_count": null, 484 | "metadata": {}, 485 | "outputs": [], 486 | "source": [] 487 | } 488 | ], 489 | "metadata": { 490 | "kernelspec": { 491 | "display_name": "Python 3", 492 | "language": "python", 493 | "name": "python3" 494 | }, 495 | "language_info": { 496 | "codemirror_mode": { 497 | "name": "ipython", 498 | "version": 3 499 | }, 500 | "file_extension": ".py", 501 | "mimetype": "text/x-python", 502 | "name": "python", 503 | "nbconvert_exporter": "python", 504 | "pygments_lexer": "ipython3", 505 | "version": "3.7.7" 506 | } 507 | }, 508 | "nbformat": 4, 509 | "nbformat_minor": 4 510 | } 511 | --------------------------------------------------------------------------------