├── 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 |
--------------------------------------------------------------------------------