Browse Source

Add contents in README.md

fetches/feikei/master
Shuhui Bu 6 years ago
parent
commit
b7b80b7ec5
42 changed files with 575 additions and 1463 deletions
  1. +0
    -134
      0_python/02 Print Statement.py
  2. +0
    -386
      0_python/03 Data Structure.py
  3. +0
    -175
      0_python/05 Control Flow.py
  4. +0
    -298
      0_python/07 Class.py
  5. +0
    -0
      0_python/0_Introduction.ipynb
  6. +0
    -0
      0_python/1_Basics.ipynb
  7. +0
    -0
      0_python/2_Print_Statement.ipynb
  8. +0
    -0
      0_python/3_Data_Structure_1.ipynb
  9. +0
    -0
      0_python/4_Data_Structure_2.ipynb
  10. +0
    -0
      0_python/5_Control_Flow.ipynb
  11. +0
    -0
      0_python/6_Function.ipynb
  12. +0
    -0
      0_python/7_Class.ipynb
  13. +69
    -43
      1_logistic_regression/Least_squares.ipynb
  14. +15
    -0
      1_logistic_regression/Least_squares.py
  15. +13
    -10
      1_logistic_regression/Logistic_regression.ipynb
  16. +1
    -0
      1_logistic_regression/Logistic_regression.py
  17. +1
    -1
      1_nn/mlp_bp.ipynb
  18. +1
    -1
      1_nn/mlp_bp.py
  19. +2
    -3
      1_nn/softmax_ce.ipynb
  20. +1
    -1
      1_nn/softmax_ce.py
  21. +0
    -0
      2_pytorch/1_NN/data.txt
  22. +0
    -0
      2_pytorch/1_NN/logistic-regression.ipynb
  23. +0
    -0
      2_pytorch/1_NN/logistic-regression.py
  24. +0
    -0
      2_pytorch/1_NN/nn_summary.ipynb
  25. +1
    -1
      2_pytorch/2_CNN/googlenet.ipynb
  26. +206
    -0
      2_pytorch/2_CNN/googlenet.py
  27. +1
    -1
      2_pytorch/2_CNN/resnet.ipynb
  28. +191
    -0
      2_pytorch/2_CNN/resnet.py
  29. BIN
      2_pytorch/imgs/Ipython-auto.png
  30. BIN
      2_pytorch/imgs/Ipython-help.png
  31. BIN
      2_pytorch/imgs/Jupyter主页面.png
  32. BIN
      2_pytorch/imgs/Notebook主界面.png
  33. BIN
      2_pytorch/imgs/autograd_Variable.png
  34. +2
    -0
      2_pytorch/imgs/autograd_Variable.svg
  35. BIN
      2_pytorch/imgs/del/img1.png
  36. BIN
      2_pytorch/imgs/del/img2.png
  37. BIN
      2_pytorch/imgs/install-1.png
  38. BIN
      2_pytorch/imgs/install-2.png
  39. BIN
      2_pytorch/imgs/nn_lenet.png
  40. +52
    -9
      README.md
  41. +19
    -0
      References.md
  42. +0
    -400
      dataset_circle.csv

+ 0
- 134
0_python/02 Print Statement.py View File

@@ -1,134 +0,0 @@
# ---
# jupyter:
# jupytext_format_version: '1.2'
# kernelspec:
# display_name: Python 3
# language: python
# name: python3
# language_info:
# codemirror_mode:
# name: ipython
# version: 3
# file_extension: .py
# mimetype: text/x-python
# name: python
# nbconvert_exporter: python
# pygments_lexer: ipython3
# version: 3.5.2
# ---

# All the IPython Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures

# # Print Statement

# The **print** statement can be used in the following different ways :
#
# - print("Hello World")
# - print("Hello", <Variable Containing the String>)
# - print("Hello" + <Variable Containing the String>)
# - print("Hello %s" % <variable containing the string>)

print("Hello World")

# In Python, single, double and triple quotes are used to denote a string.
# Most use single quotes when declaring a single character.
# Double quotes when declaring a line and triple quotes when declaring a paragraph/multiple lines.

print('Hey')

print("""My name is Rajath Kumar M.P.

I love Python.""")

# Strings can be assigned to variable say _string1_ and _string2_ which can called when using the print statement.

# + {"scrolled": true}
string1 = 'World'
print('Hello', string1)

string2 = '!'
print('Hello', string1, string2)
# -

# String concatenation is the "addition" of two strings. Observe that while concatenating there will be no space between the strings.

print('Hello' + string1 + string2)

# **%s** is used to refer to a variable which contains a string.

print("Hello %s" % string1)

# Similarly, when using other data types
#
# - %s -> string
# - %d -> Integer
# - %f -> Float
# - %o -> Octal
# - %x -> Hexadecimal
# - %e -> exponential
#
# This can be used for conversions inside the print statement itself.

print("Actual Number = %d" % 18)
print("Float of the number = %f" % 18)
print("Octal equivalent of the number = %o" % 18)
print("Hexadecimal equivalent of the number = %x" % 18)
print("Exponential equivalent of the number = %e" % 18)

# When referring to multiple variables parenthesis is used.

print "Hello %s %s" %(string1,string2)

# ## Other Examples

# The following are other different ways the print statement can be put to use.

print("I want %%d to be printed %s" %'here')

print('_A'*10)

print("Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug")

print("\n".join("Jan Feb Mar Apr May Jun Jul Aug".split(" ")))

print("I want \\n to be printed.")

print """
Routine:
\t- Eat
\t- Sleep\n\t- Repeat
"""

# # PrecisionWidth and FieldWidth

# Fieldwidth is the width of the entire number and precision is the width towards the right. One can alter these widths based on the requirements.
#
# The default Precision Width is set to 6.

"%f" % 3.121312312312

# Notice upto 6 decimal points are returned. To specify the number of decimal points, '%(fieldwidth).(precisionwidth)f' is used.

"%.5f" % 3.121312312312

# If the field width is set more than the necessary than the data right aligns itself to adjust to the specified values.

"%9.5f" % 3.121312312312

# Zero padding is done by adding a 0 at the start of fieldwidth.

"%020.5f" % 3.121312312312

# For proper alignment, a space can be left blank in the field width so that when a negative number is used, proper alignment is maintained.

print "% 9f" % 3.121312312312
print "% 9f" % -3.121312312312

# '+' sign can be returned at the beginning of a positive number by adding a + sign at the beginning of the field width.

print "%+9f" % 3.121312312312
print "% 9f" % -3.121312312312

# As mentioned above, the data right aligns itself when the field width mentioned is larger than the actualy field width. But left alignment can be done by specifying a negative symbol in the field width.

"%-9.3f" % 3.121312312312

+ 0
- 386
0_python/03 Data Structure.py View File

@@ -1,386 +0,0 @@
# ---
# jupyter:
# jupytext_format_version: '1.2'
# kernelspec:
# display_name: Python 3
# language: python
# name: python3
# language_info:
# codemirror_mode:
# name: ipython
# version: 3
# file_extension: .py
# mimetype: text/x-python
# name: python
# nbconvert_exporter: python
# pygments_lexer: ipython3
# version: 3.5.2
# ---

# All the IPython Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures

# # Data Structures

# In simple terms, It is the the collection or group of data in a particular structure.

# ## Lists

# Lists are the most commonly used data structure. Think of it as a sequence of data that is enclosed in square brackets and data are separated by a comma. Each of these data can be accessed by calling it's index value.
#
# Lists are declared by just equating a variable to '[ ]' or list.

a = []

print(type(a))

# One can directly assign the sequence of data to a list x as shown.

x = ['apple', 'orange', 'peach']

# ### Indexing

# In python, Indexing starts from 0. Thus now the list x, which has two elements will have apple at 0 index and orange at 1 index.

x[0]

# Indexing can also be done in reverse order. That is the last element can be accessed first. Here, indexing starts from -1. Thus index value -1 will be orange and index -2 will be apple.

x[-1]

# As you might have already guessed, x[0] = x[-2], x[1] = x[-1]. This concept can be extended towards lists with more many elements.

y = ['carrot','potato']

# Here we have declared two lists x and y each containing its own data. Now, these two lists can again be put into another list say z which will have it's data as two lists. This list inside a list is called as nested lists and is how an array would be declared which we will see later.

z = [x,y]
print(z)

# Indexing in nested lists can be quite confusing if you do not understand how indexing works in python. So let us break it down and then arrive at a conclusion.
#
# Let us access the data 'apple' in the above nested list.
# First, at index 0 there is a list ['apple','orange'] and at index 1 there is another list ['carrot','potato']. Hence z[0] should give us the first list which contains 'apple'.

z1 = z[0]
print(z1)

# Now observe that z1 is not at all a nested list thus to access 'apple', z1 should be indexed at 0.

z1[0]

# Instead of doing the above, In python, you can access 'apple' by just writing the index values each time side by side.

z[0][0]

# If there was a list inside a list inside a list then you can access the innermost value by executing z[ ][ ][ ].

# ### Slicing

# Indexing was only limited to accessing a single element, Slicing on the other hand is accessing a sequence of data inside the list. In other words "slicing" the list.
#
# Slicing is done by defining the index values of the first element and the last element from the parent list that is required in the sliced list. It is written as parentlist[ a : b ] where a,b are the index values from the parent list. If a or b is not defined then the index value is considered to be the first value for a if a is not defined and the last value for b when b is not defined.

num = [0,1,2,3,4,5,6,7,8,9]

print(num[0:4])
print(num[4:])

# You can also slice a parent list with a fixed length or step length.

num[:9:3]

# ### Built in List Functions

# To find the length of the list or the number of elements in a list, **len( )** is used.

len(num)

# If the list consists of all integer elements then **min( )** and **max( )** gives the minimum and maximum value in the list.

min(num)

max(num)

# Lists can be concatenated by adding, '+' them. The resultant list will contain all the elements of the lists that were added. The resultant list will not be a nested list.

[1,2,3] + [5,4,7]

# There might arise a requirement where you might need to check if a particular element is there in a predefined list. Consider the below list.

names = ['Earth','Air','Fire','Water']

# To check if 'Fire' and 'Rajath' is present in the list names. A conventional approach would be to use a for loop and iterate over the list and use the if condition. But in python you can use 'a in b' concept which would return 'True' if a is present in b and 'False' if not.

'Fire' in names

'Rajath' in names

# In a list with elements as string, **max( )** and **min( )** is applicable. **max( )** would return a string element whose ASCII value is the highest and the lowest when **min( )** is used. Note that only the first index of each element is considered each time and if they value is the same then second index considered so on and so forth.

mlist = ['bzaa','ds','nc','az','z','klm']

print(max(mlist))
print(min(mlist))

# Here the first index of each element is considered and thus z has the highest ASCII value thus it is returned and minimum ASCII is a. But what if numbers are declared as strings?

nlist = ['1','94','93','1000']

print(max(nlist))
print(min(nlist))

# Even if the numbers are declared in a string the first index of each element is considered and the maximum and minimum values are returned accordingly.

# But if you want to find the **max( )** string element based on the length of the string then another parameter 'key=len' is declared inside the **max( )** and **min( )** function.

print(max(names, key=len))
print(min(names, key=len))

# But even 'Water' has length 5. **max()** or **min()** function returns the first element when there are two or more elements with the same length.
#
# Any other built in function can be used or lambda function (will be discussed later) in place of len.
#
# A string can be converted into a list by using the **list()** function.

list('hello')

# **append( )** is used to add a element at the end of the list.

lst = [1,1,4,8,7]

lst.append(1)
print(lst)

# **count( )** is used to count the number of a particular element that is present in the list.

lst.count(1)

# **append( )** function can also be used to add a entire list at the end. Observe that the resultant list becomes a nested list.

lst1 = [5,4,2,8]

lst.append(lst1)
print(lst)

# But if nested list is not what is desired then **extend( )** function can be used.

lst.extend(lst1)
print(lst)

# **index( )** is used to find the index value of a particular element. Note that if there are multiple elements of the same value then the first index value of that element is returned.

lst.index(1)

# **insert(x,y)** is used to insert a element y at a specified index value x. **append( )** function made it only possible to insert at the end.

lst.insert(5, 'name')
print(lst)

# **insert(x,y)** inserts but does not replace element. If you want to replace the element with another element you simply assign the value to that particular index.

lst[5] = 'Python'
print(lst)

# **pop( )** function return the last element in the list. This is similar to the operation of a stack. Hence it wouldn't be wrong to tell that lists can be used as a stack.

lst.pop()

# Index value can be specified to pop a ceratin element corresponding to that index value.

lst.pop(0)

# **pop( )** is used to remove element based on it's index value which can be assigned to a variable. One can also remove element by specifying the element itself using the **remove( )** function.

lst.remove('Python')
print(lst)

# Alternative to **remove** function but with using index value is **del**

del lst[1]
print(lst)

# The entire elements present in the list can be reversed by using the **reverse()** function.

lst.reverse()
print(lst)

# Note that the nested list [5,4,2,8] is treated as a single element of the parent list lst. Thus the elements inside the nested list is not reversed.
#
# Python offers built in operation **sort( )** to arrange the elements in ascending order.

lst.sort()
print(lst)

# For descending order, By default the reverse condition will be False for reverse. Hence changing it to True would arrange the elements in descending order.

lst.sort(reverse=True)
print(lst)

# Similarly for lists containing string elements, **sort( )** would sort the elements based on it's ASCII value in ascending and by specifying reverse=True in descending.

names.sort()
print(names)
names.sort(reverse=True)
print(names)

# To sort based on length key=len should be specified as shown.

names.sort(key=len)
print(names)
names.sort(key=len,reverse=True)
print(names)

# ### Copying a list

# Most of the new python programmers commit this mistake. Consider the following,

lista= [2,1,4,3]

listb = lista
print(listb)

# Here, We have declared a list, lista = [2,1,4,3]. This list is copied to listb by assigning it's value and it get's copied as seen. Now we perform some random operations on lista.

lista.pop()
print(lista)
lista.append(9)
print(lista)

print listb

# listb has also changed though no operation has been performed on it. This is because you have assigned the same memory space of lista to listb. So how do fix this?
#
# If you recall, in slicing we had seen that parentlist[a:b] returns a list from parent list with start index a and end index b and if a and b is not mentioned then by default it considers the first and last element. We use the same concept here. By doing so, we are assigning the data of lista to listb as a variable.

lista = [2,1,4,3]

listb = lista[:]
print(listb)

lista.pop()
print(lista)
lista.append(9)
print(lista)

print(listb)

# ## Tuples

# Tuples are similar to lists but only big difference is the elements inside a list can be changed but in tuple it cannot be changed. Think of tuples as something which has to be True for a particular something and cannot be True for no other values. For better understanding, Recall **divmod()** function.

xyz = divmod(10,3)
print(xyz)
print(type(xyz))

# Here the quotient has to be 3 and the remainder has to be 1. These values cannot be changed whatsoever when 10 is divided by 3. Hence divmod returns these values in a tuple.

# To define a tuple, A variable is assigned to paranthesis ( ) or tuple( ).

tup = ()
tup2 = tuple()

# If you want to directly declare a tuple it can be done by using a comma at the end of the data.

27,

# 27 when multiplied by 2 yields 54, But when multiplied with a tuple the data is repeated twice.

2*(27,)

# Values can be assigned while declaring a tuple. It takes a list as input and converts it into a tuple or it takes a string and converts it into a tuple.

# + {"scrolled": true}
tup3 = tuple([1,2,3])
print(tup3)
tup4 = tuple('Hello')
print(tup4)
# -

# It follows the same indexing and slicing as Lists.

print(tup3[1])
tup5 = tup4[:3]
print(tup5)

# ### Mapping one tuple to another

(a,b,c)= ('alpha','beta','gamma')

print(a,b,c)

d = tuple('RajathKumarMP')
print(d)

# ### Built In Tuple functions

# **count()** function counts the number of specified element that is present in the tuple.

d.count('a')

# **index()** function returns the index of the specified element. If the elements are more than one then the index of the first element of that specified element is returned

d.index('a')

# ## Sets

# Sets are mainly used to eliminate repeated numbers in a sequence/list. It is also used to perform some standard set operations.
#
# Sets are declared as set() which will initialize a empty set. Also set([sequence]) can be executed to declare a set with elements

set1 = set()
print(type(set1))

set0 = set([1,2,2,3,3,4])
print(set0)

# elements 2,3 which are repeated twice are seen only once. Thus in a set each element is distinct.

# ### Built-in Functions

set1 = set([1,2,3])

set2 = set([2,3,4,5])

# **union( )** function returns a set which contains all the elements of both the sets without repition.

set1.union(set2)

# **add( )** will add a particular element into the set. Note that the index of the newly added element is arbitrary and can be placed anywhere not neccessarily in the end.

set1.add(0)
set1

# **intersection( )** function outputs a set which contains all the elements that are in both sets.

set1.intersection(set2)

# **difference( )** function ouptuts a set which contains elements that are in set1 and not in set2.

set1.difference(set2)

# **symmetric_difference( )** function ouputs a function which contains elements that are in one of the sets.

set2.symmetric_difference(set1)

# **issubset( ), isdisjoint( ), issuperset( )** is used to check if the set1/set2 is a subset, disjoint or superset of set2/set1 respectively.

set1.issubset(set2)

set2.isdisjoint(set1)

set2.issuperset(set1)

# **pop( )** is used to remove an arbitrary element in the set

set1.pop()
print(set1)

# **remove( )** function deletes the specified element from the set.

set1.remove(2)
set1

# **clear( )** is used to clear all the elements and make that set an empty set.

set1.clear()
set1

+ 0
- 175
0_python/05 Control Flow.py View File

@@ -1,175 +0,0 @@
# ---
# jupyter:
# jupytext_format_version: '1.2'
# kernelspec:
# display_name: Python 3
# language: python
# name: python3
# language_info:
# codemirror_mode:
# name: ipython
# version: 3
# file_extension: .py
# mimetype: text/x-python
# name: python
# nbconvert_exporter: python
# pygments_lexer: ipython3
# version: 3.5.2
# ---

# All the IPython Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures

# # Control Flow Statements

# ## If

# if some_condition:
#
# algorithm

x = 12
if x >10:
print("Hello")

# ## If-else

# if some_condition:
#
# algorithm
#
# else:
#
# algorithm

x = 12
if x > 10:
print("hello")
else:
print("world")

# ## if-elif

# if some_condition:
#
# algorithm
#
# elif some_condition:
#
# algorithm
#
# else:
#
# algorithm

x = 10
y = 12
if x > y:
print("x>y")
elif x < y:
print("x<y")
else:
print("x=y")

# if statement inside a if statement or if-elif or if-else are called as nested if statements.

x = 10
y = 12
if x > y:
print("x>y")
elif x < y:
print("x<y")
if x==10:
print("x=10")
else:
print("invalid")
else:
print("x=y")

# ## Loops

# ### For

# for variable in something:
#
# algorithm

for i in range(5):
print(i)

# In the above example, i iterates over the 0,1,2,3,4. Every time it takes each value and executes the algorithm inside the loop. It is also possible to iterate over a nested list illustrated below.

list_of_lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for list1 in list_of_lists:
print(list1)

# A use case of a nested for loop in this case would be,

list_of_lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for list1 in list_of_lists:
for x in list1:
print(x)

# ### While

# while some_condition:
#
# algorithm

# +
i = 1
while i < 3:
print(i ** 2)
i = i+1
print('Bye')

# do-untile
while True:
#do something
# check
if xxxx: break
# -

# ## Break

# As the name says. It is used to break out of a loop when a condition becomes true when executing the loop.

for i in range(100):
print i
if i>=7:
break

# ## Continue

# This continues the rest of the loop. Sometimes when a condition is satisfied there are chances of the loop getting terminated. This can be avoided using continue statement.

for i in range(10):
if i>4:
print("The end.")
continue
elif i<7:
print(i)

# ## List Comprehensions

# Python makes it simple to generate a required list with a single line of code using list comprehensions. For example If i need to generate multiples of say 27 I write the code using for loop as,

res = []
for i in range(1,11):
x = 27*i
res.append(x)
print res

# Since you are generating another list altogether and that is what is required, List comprehensions is a more efficient way to solve this problem.

[27*x for x in range(1,11)]

# That's it!. Only remember to enclose it in square brackets

# Understanding the code, The first bit of the code is always the algorithm and then leave a space and then write the necessary loop. But you might be wondering can nested loops be extended to list comprehensions? Yes you can.

[27*x for x in range(1,20) if x<=10]

# Let me add one more loop to make you understand better,

[27*z for i in range(50) if i==27 for z in range(1,11)]

+ 0
- 298
0_python/07 Class.py View File

@@ -1,298 +0,0 @@
# ---
# jupyter:
# jupytext_format_version: '1.2'
# kernelspec:
# display_name: Python 3
# language: python
# name: python3
# language_info:
# codemirror_mode:
# name: ipython
# version: 3
# file_extension: .py
# mimetype: text/x-python
# name: python
# nbconvert_exporter: python
# pygments_lexer: ipython3
# version: 3.5.2
# ---

# All the IPython Notebooks in this lecture series are available at https://github.com/rajathkumarmp/Python-Lectures

# # Classes

# Variables, Lists, Dictionaries etc in python is a object. Without getting into the theory part of Object Oriented Programming, explanation of the concepts will be done along this tutorial.

# A class is declared as follows

# class class_name:
#
# Functions

class FirstClass:
pass

# **pass** in python means do nothing.

# Above, a class object named "FirstClass" is declared now consider a "egclass" which has all the characteristics of "FirstClass". So all you have to do is, equate the "egclass" to "FirstClass". In python jargon this is called as creating an instance. "egclass" is the instance of "FirstClass"

egclass = FirstClass()

type(egclass)

type(FirstClass)

# Now let us add some "functionality" to the class. So that our "FirstClass" is defined in a better way. A function inside a class is called as a "Method" of that class

# Most of the classes will have a function named "\_\_init\_\_". These are called as magic methods. In this method you basically initialize the variables of that class or any other initial algorithms which is applicable to all methods is specified in this method. A variable inside a class is called an attribute.

# These helps simplify the process of initializing a instance. For example,
#
# Without the use of magic method or \_\_init\_\_ which is otherwise called as constructors. One had to define a **init( )** method and call the **init( )** function.

eg0 = FirstClass()
eg0.init()

# But when the constructor is defined the \_\_init\_\_ is called thus intializing the instance created.

# We will make our "FirstClass" to accept two variables name and symbol.
#
# I will be explaining about the "self" in a while.

class FirstClass:
def __init__(self,name,symbol):
self.name = name
self.symbol = symbol

# Now that we have defined a function and added the \_\_init\_\_ method. We can create a instance of FirstClass which now accepts two arguments.

eg1 = FirstClass('one',1)
eg2 = FirstClass('two',2)

print(eg1.name, eg1.symbol)
print(eg2.name, eg2.symbol)

# **dir( )** function comes very handy in looking into what the class contains and what all method it offers

dir(FirstClass)

# **dir( )** of an instance also shows it's defined attributes.

dir(eg1)

# Changing the FirstClass function a bit,

class FirstClass:
def __init__(self,name,symbol):
self.n = name
self.s = symbol

# Changing self.name and self.symbol to self.n and self.s respectively will yield,

eg1 = FirstClass('one',1)
eg2 = FirstClass('two',2)

print(eg1.name, eg1.symbol)
print(eg2.name, eg2.symbol)

# AttributeError, Remember variables are nothing but attributes inside a class? So this means we have not given the correct attribute for the instance.

dir(eg1)

print(eg1.n, eg1.s)
print(eg2.n, eg2.s)

# So now we have solved the error. Now let us compare the two examples that we saw.
#
# When I declared self.name and self.symbol, there was no attribute error for eg1.name and eg1.symbol and when I declared self.n and self.s, there was no attribute error for eg1.n and eg1.s
#
# From the above we can conclude that self is nothing but the instance itself.
#
# Remember, self is not predefined it is userdefined. You can make use of anything you are comfortable with. But it has become a common practice to use self.

class FirstClass:
def __init__(asdf1234,name,symbol):
asdf1234.n = name
asdf1234.s = symbol

eg1 = FirstClass('one',1)
eg2 = FirstClass('two',2)

print(eg1.n, eg1.s)
print(eg2.n, eg2.s)

# Since eg1 and eg2 are instances of FirstClass it need not necessarily be limited to FirstClass itself. It might extend itself by declaring other attributes without having the attribute to be declared inside the FirstClass.

eg1.cube = 1
eg2.cube = 8

dir(eg1)

# Just like global and local variables as we saw earlier, even classes have it's own types of variables.
#
# Class Attribute : attributes defined outside the method and is applicable to all the instances.
#
# Instance Attribute : attributes defined inside a method and is applicable to only that method and is unique to each instance.

class FirstClass:
test = 'test'
def __init__(self,name,symbol):
self.name = name
self.symbol = symbol

# Here test is a class attribute and name is a instance attribute.

eg3 = FirstClass('Three',3)

print(eg3.test, eg3.name)

# Let us add some more methods to FirstClass.

class FirstClass:
def __init__(self,name,symbol):
self.name = name
self.symbol = symbol
def square(self):
return self.symbol * self.symbol
def cube(self):
return self.symbol * self.symbol * self.symbol
def multiply(self, x):
return self.symbol * x

eg4 = FirstClass('Five',5)

print eg4.square()
print eg4.cube()

eg4.multiply(2)

# The above can also be written as,

FirstClass.multiply(eg4,2)

# ## Inheritance

# There might be cases where a new class would have all the previous characteristics of an already defined class. So the new class can "inherit" the previous class and add it's own methods to it. This is called as inheritance.

# Consider class SoftwareEngineer which has a method salary.

class SoftwareEngineer:
def __init__(self,name,age):
self.name = name
self.age = age
def salary(self, value):
self.money = value
print(self.name,"earns",self.money)

a = SoftwareEngineer('Kartik',26)

a.salary(40000)

dir(SoftwareEngineer)

# Now consider another class Artist which tells us about the amount of money an artist earns and his artform.

class Artist:
def __init__(self,name,age):
self.name = name
self.age = age
def money(self,value):
self.money = value
print(self.name,"earns",self.money)
def artform(self, job):
self.job = job
print(self.name,"is a", self.job)

b = Artist('Nitin',20)

b.money(50000)
b.artform('Musician')

dir(Artist)

# money method and salary method are the same. So we can generalize the method to salary and inherit the SoftwareEngineer class to Artist class. Now the artist class becomes,

class Artist(SoftwareEngineer):
def artform(self, job):
self.job = job
print(self.name,"is a", self.job)

c = Artist('Nishanth',21)

dir(Artist)

c.salary(60000)
c.artform('Dancer')

# Suppose say while inheriting a particular method is not suitable for the new class. One can override this method by defining again that method with the same name inside the new class.

class Artist(SoftwareEngineer):
def artform(self, job):
self.job = job
print(self.name,"is a", self.job)
def salary(self, value):
self.money = value
print(self.name,"earns",self.money)
print("I am overriding the SoftwareEngineer class's salary method")

c = Artist('Nishanth',21)

c.salary(60000)
c.artform('Dancer')

# If not sure how many times methods will be called it will become difficult to declare so many variables to carry each result hence it is better to declare a list and append the result.

class emptylist:
def __init__(self):
self.data = []
def one(self,x):
self.data.append(x)
def two(self, x ):
self.data.append(x**2)
def three(self, x):
self.data.append(x**3)

xc = emptylist()

xc.one(1)
print xc.data

# Since xc.data is a list direct list operations can also be performed.

xc.data.append(8)
print xc.data

xc.two(3)
print xc.data

# If the number of input arguments varies from instance to instance asterisk can be used as shown.

class NotSure:
def __init__(self, *args):
self.data = ''.join(list(args))

yz = NotSure('I', 'Do' , 'Not', 'Know', 'What', 'To','Type')

yz.data

# # Where to go from here?

# Practice alone can help you get the hang of python. Give your self problem statements and solve them. You can also sign up to any competitive coding platform for problem statements. The more you code the more you discover and the more you start appreciating the language.
#
#
# Now that you have been introduced to python, You can try out the different python libraries in the field of your interest. I highly recommend you to check out this curated list of Python frameworks, libraries and software http://awesome-python.com
#
#
# The official python documentation : https://docs.python.org/2/
#
#
# You can also check out Python practice programs written by my friend, Kartik Kannapur. Github Repo : https://github.com/rajathkumarmp/Python-Lectures
#
#
# Enjoy solving problem statements because life is short, you need python!
#
#
# Peace.
#
#
# Rajath Kumar M.P ( rajathkumar dot exe at gmail dot com)

0_python/00 Introduction.ipynb → 0_python/0_Introduction.ipynb View File


0_python/01 Basics.ipynb → 0_python/1_Basics.ipynb View File


0_python/02 Print Statement.ipynb → 0_python/2_Print_Statement.ipynb View File


0_python/03 Data Structure.ipynb → 0_python/3_Data_Structure_1.ipynb View File


0_python/04 Data Structure 2.ipynb → 0_python/4_Data_Structure_2.ipynb View File


0_python/05 Control Flow.ipynb → 0_python/5_Control_Flow.ipynb View File


0_python/06 Function.ipynb → 0_python/6_Function.ipynb View File


0_python/07 Class.ipynb → 0_python/7_Class.ipynb View File


+ 69
- 43
1_logistic_regression/Least_squares.ipynb
File diff suppressed because it is too large
View File


+ 15
- 0
1_logistic_regression/Least_squares.py View File

@@ -239,6 +239,9 @@ plt.show()
# $$
# The we need at least three data to compute the parameters $a, b, c$.
#
# $$
# L = \sum_{i=1}^N (y_i - at^2 - bt - c)^2
# $$
#

# +
@@ -256,6 +259,18 @@ plt.scatter(t, y)
plt.show()
# -

# ### How to get the update items?
#
# $$
# L = \sum_{i=1}^N (y_i - at^2 - bt - c)^2
# $$
#
# \begin{eqnarray}
# \frac{\partial L}{\partial a} & = & - 2\sum_{i=1}^N (y_i - at^2 - bt -c) t^2 \\
# \frac{\partial L}{\partial b} & = & - 2\sum_{i=1}^N (y_i - at^2 - bt -c) t \\
# \frac{\partial L}{\partial c} & = & - 2\sum_{i=1}^N (y_i - at^2 - bt -c)
# \end{eqnarray}

# ## How to use sklearn to solve linear problem?
#
#


+ 13
- 10
1_logistic_regression/Logistic_regression.ipynb
File diff suppressed because it is too large
View File


+ 1
- 0
1_logistic_regression/Logistic_regression.py View File

@@ -34,6 +34,7 @@
#
# 逻辑回归就是一种减小预测范围,将预测值限定为$[0,1]$间的一种回归模型,其回归方程与回归曲线如图2所示。逻辑曲线在$z=0$时,十分敏感,在$z>>0$或$z<<0$处,都不敏感,将预测值限定为$(0,1)$。
#
# FIXME: this figure is wrong
# ![LogisticFunction](images/fig2.gif)
#
#


+ 1
- 1
1_nn/mlp_bp.ipynb View File

@@ -4750,7 +4750,7 @@
"1. 我们希望得到的每个类别的概率\n",
"2. 如何做多分类问题?\n",
"3. 如何能让神经网络更快的训练好?\n",
"4. 如何抽象,让神经网络的类支持更多的类型的层"
"4. 如何更好的构建网络的类定义,从而让神经网络的类支持更多的类型的处理层?"
]
},
{


+ 1
- 1
1_nn/mlp_bp.py View File

@@ -546,7 +546,7 @@ print(y_res[1:10, :])
# 1. 我们希望得到的每个类别的概率
# 2. 如何做多分类问题?
# 3. 如何能让神经网络更快的训练好?
# 4. 如何抽象,让神经网络的类支持更多的类型的层
# 4. 如何更好的构建网络的类定义,从而让神经网络的类支持更多的类型的处理层?

# ## References
# * 反向传播算法


+ 2
- 3
1_nn/softmax_ce.ipynb View File

@@ -135,7 +135,7 @@
"metadata": {},
"source": [
"## 问题\n",
"如何将本节所讲的softmax,交叉熵代价函数应用到上节所讲的方法中?"
"如何将本节所讲的softmax,交叉熵代价函数应用到上节所讲的BP方法中?"
]
},
{
@@ -168,8 +168,7 @@
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
},
"main_language": "python"
}
},
"nbformat": 4,
"nbformat_minor": 2


+ 1
- 1
1_nn/softmax_ce.py View File

@@ -136,7 +136,7 @@
# \end{eqnarray}

# ## 问题
# 如何将本节所讲的softmax,交叉熵代价函数应用到上节所讲的方法中?
# 如何将本节所讲的softmax,交叉熵代价函数应用到上节所讲的BP方法中?

# ## References
#


2_pytorch/1_NN/logistic-regression/data.txt → 2_pytorch/1_NN/data.txt View File


2_pytorch/1_NN/logistic-regression/logistic-regression.ipynb → 2_pytorch/1_NN/logistic-regression.ipynb View File


2_pytorch/1_NN/logistic-regression/logistic-regression.py → 2_pytorch/1_NN/logistic-regression.py View File


2_pytorch/1_NN/nn_intro.ipynb → 2_pytorch/1_NN/nn_summary.ipynb View File


+ 1
- 1
2_pytorch/2_CNN/googlenet.ipynb View File

@@ -377,7 +377,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.3"
"version": "3.5.2"
}
},
"nbformat": 4,


+ 206
- 0
2_pytorch/2_CNN/googlenet.py View File

@@ -0,0 +1,206 @@
# -*- coding: utf-8 -*-
# ---
# jupyter:
# jupytext_format_version: '1.2'
# kernelspec:
# display_name: Python 3
# language: python
# name: python3
# language_info:
# codemirror_mode:
# name: ipython
# version: 3
# file_extension: .py
# mimetype: text/x-python
# name: python
# nbconvert_exporter: python
# pygments_lexer: ipython3
# version: 3.5.2
# ---

# # GoogLeNet
# 前面我们讲的 VGG 是 2014 年 ImageNet 比赛的亚军,那么冠军是谁呢?就是我们马上要讲的 GoogLeNet,这是 Google 的研究人员提出的网络结构,在当时取得了非常大的影响,因为网络的结构变得前所未有,它颠覆了大家对卷积网络的串联的印象和固定做法,采用了一种非常有效的 inception 模块,得到了比 VGG 更深的网络结构,但是却比 VGG 的参数更少,因为其去掉了后面的全连接层,所以参数大大减少,同时有了很高的计算效率。
#
# ![](https://ws2.sinaimg.cn/large/006tNc79ly1fmprhdocouj30qb08vac3.jpg)
#
# 这是 googlenet 的网络示意图,下面我们介绍一下其作为创新的 inception 模块。

# ## Inception 模块
# 在上面的网络中,我们看到了多个四个并行卷积的层,这些四个卷积并行的层就是 inception 模块,可视化如下
#
# ![](https://ws4.sinaimg.cn/large/006tNc79gy1fmprivb2hxj30dn09dwef.jpg)
#

# 一个 inception 模块的四个并行线路如下:
# 1.一个 1 x 1 的卷积,一个小的感受野进行卷积提取特征
# 2.一个 1 x 1 的卷积加上一个 3 x 3 的卷积,1 x 1 的卷积降低输入的特征通道,减少参数计算量,然后接一个 3 x 3 的卷积做一个较大感受野的卷积
# 3.一个 1 x 1 的卷积加上一个 5 x 5 的卷积,作用和第二个一样
# 4.一个 3 x 3 的最大池化加上 1 x 1 的卷积,最大池化改变输入的特征排列,1 x 1 的卷积进行特征提取
#
# 最后将四个并行线路得到的特征在通道这个维度上拼接在一起,下面我们可以实现一下

# + {"ExecuteTime": {"end_time": "2017-12-22T12:51:05.427292Z", "start_time": "2017-12-22T12:51:04.924747Z"}}
import sys
sys.path.append('..')

import numpy as np
import torch
from torch import nn
from torch.autograd import Variable
from torchvision.datasets import CIFAR10

# + {"ExecuteTime": {"end_time": "2017-12-22T12:51:08.890890Z", "start_time": "2017-12-22T12:51:08.876313Z"}}
# 定义一个卷积加一个 relu 激活函数和一个 batchnorm 作为一个基本的层结构
def conv_relu(in_channel, out_channel, kernel, stride=1, padding=0):
layer = nn.Sequential(
nn.Conv2d(in_channel, out_channel, kernel, stride, padding),
nn.BatchNorm2d(out_channel, eps=1e-3),
nn.ReLU(True)
)
return layer

# + {"ExecuteTime": {"end_time": "2017-12-22T12:51:09.671474Z", "start_time": "2017-12-22T12:51:09.587337Z"}}
class inception(nn.Module):
def __init__(self, in_channel, out1_1, out2_1, out2_3, out3_1, out3_5, out4_1):
super(inception, self).__init__()
# 第一条线路
self.branch1x1 = conv_relu(in_channel, out1_1, 1)
# 第二条线路
self.branch3x3 = nn.Sequential(
conv_relu(in_channel, out2_1, 1),
conv_relu(out2_1, out2_3, 3, padding=1)
)
# 第三条线路
self.branch5x5 = nn.Sequential(
conv_relu(in_channel, out3_1, 1),
conv_relu(out3_1, out3_5, 5, padding=2)
)
# 第四条线路
self.branch_pool = nn.Sequential(
nn.MaxPool2d(3, stride=1, padding=1),
conv_relu(in_channel, out4_1, 1)
)
def forward(self, x):
f1 = self.branch1x1(x)
f2 = self.branch3x3(x)
f3 = self.branch5x5(x)
f4 = self.branch_pool(x)
output = torch.cat((f1, f2, f3, f4), dim=1)
return output

# + {"ExecuteTime": {"end_time": "2017-12-22T12:51:10.948630Z", "start_time": "2017-12-22T12:51:10.757903Z"}}
test_net = inception(3, 64, 48, 64, 64, 96, 32)
test_x = Variable(torch.zeros(1, 3, 96, 96))
print('input shape: {} x {} x {}'.format(test_x.shape[1], test_x.shape[2], test_x.shape[3]))
test_y = test_net(test_x)
print('output shape: {} x {} x {}'.format(test_y.shape[1], test_y.shape[2], test_y.shape[3]))
# -

# 可以看到输入经过了 inception 模块之后,大小没有变化,通道的维度变多了

# 下面我们定义 GoogLeNet,GoogLeNet 可以看作是很多个 inception 模块的串联,注意,原论文中使用了多个输出来解决梯度消失的问题,这里我们只定义一个简单版本的 GoogLeNet,简化为一个输出

# + {"ExecuteTime": {"end_time": "2017-12-22T12:51:13.149380Z", "start_time": "2017-12-22T12:51:12.934110Z"}}
class googlenet(nn.Module):
def __init__(self, in_channel, num_classes, verbose=False):
super(googlenet, self).__init__()
self.verbose = verbose
self.block1 = nn.Sequential(
conv_relu(in_channel, out_channel=64, kernel=7, stride=2, padding=3),
nn.MaxPool2d(3, 2)
)
self.block2 = nn.Sequential(
conv_relu(64, 64, kernel=1),
conv_relu(64, 192, kernel=3, padding=1),
nn.MaxPool2d(3, 2)
)
self.block3 = nn.Sequential(
inception(192, 64, 96, 128, 16, 32, 32),
inception(256, 128, 128, 192, 32, 96, 64),
nn.MaxPool2d(3, 2)
)
self.block4 = nn.Sequential(
inception(480, 192, 96, 208, 16, 48, 64),
inception(512, 160, 112, 224, 24, 64, 64),
inception(512, 128, 128, 256, 24, 64, 64),
inception(512, 112, 144, 288, 32, 64, 64),
inception(528, 256, 160, 320, 32, 128, 128),
nn.MaxPool2d(3, 2)
)
self.block5 = nn.Sequential(
inception(832, 256, 160, 320, 32, 128, 128),
inception(832, 384, 182, 384, 48, 128, 128),
nn.AvgPool2d(2)
)
self.classifier = nn.Linear(1024, num_classes)
def forward(self, x):
x = self.block1(x)
if self.verbose:
print('block 1 output: {}'.format(x.shape))
x = self.block2(x)
if self.verbose:
print('block 2 output: {}'.format(x.shape))
x = self.block3(x)
if self.verbose:
print('block 3 output: {}'.format(x.shape))
x = self.block4(x)
if self.verbose:
print('block 4 output: {}'.format(x.shape))
x = self.block5(x)
if self.verbose:
print('block 5 output: {}'.format(x.shape))
x = x.view(x.shape[0], -1)
x = self.classifier(x)
return x

# + {"ExecuteTime": {"end_time": "2017-12-22T12:51:13.614936Z", "start_time": "2017-12-22T12:51:13.428383Z"}}
test_net = googlenet(3, 10, True)
test_x = Variable(torch.zeros(1, 3, 96, 96))
test_y = test_net(test_x)
print('output: {}'.format(test_y.shape))
# -

# 可以看到输入的尺寸不断减小,通道的维度不断增加

# + {"ExecuteTime": {"end_time": "2017-12-22T12:51:16.387778Z", "start_time": "2017-12-22T12:51:15.121350Z"}}
from utils import train

def data_tf(x):
x = x.resize((96, 96), 2) # 将图片放大到 96 x 96
x = np.array(x, dtype='float32') / 255
x = (x - 0.5) / 0.5 # 标准化,这个技巧之后会讲到
x = x.transpose((2, 0, 1)) # 将 channel 放到第一维,只是 pytorch 要求的输入方式
x = torch.from_numpy(x)
return x
train_set = CIFAR10('./data', train=True, transform=data_tf)
train_data = torch.utils.data.DataLoader(train_set, batch_size=64, shuffle=True)
test_set = CIFAR10('./data', train=False, transform=data_tf)
test_data = torch.utils.data.DataLoader(test_set, batch_size=128, shuffle=False)

net = googlenet(3, 10)
optimizer = torch.optim.SGD(net.parameters(), lr=0.01)
criterion = nn.CrossEntropyLoss()

# + {"ExecuteTime": {"end_time": "2017-12-22T13:17:25.310685Z", "start_time": "2017-12-22T12:51:16.389607Z"}}
train(net, train_data, test_data, 20, optimizer, criterion)
# -

# GoogLeNet 加入了更加结构化的 Inception 块使得我们能够使用更大的通道,更多的层,同时也控制了计算量。
#
# **小练习:GoogLeNet 有很多后续的版本,尝试看看论文,看看有什么不同,实现一下:
# v1:最早的版本
# v2:加入 batch normalization 加快训练
# v3:对 inception 模块做了调整
# v4:基于 ResNet 加入了 残差连接 **

+ 1
- 1
2_pytorch/2_CNN/resnet.ipynb View File

@@ -377,7 +377,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.3"
"version": "3.5.2"
}
},
"nbformat": 4,


+ 191
- 0
2_pytorch/2_CNN/resnet.py View File

@@ -0,0 +1,191 @@
# -*- coding: utf-8 -*-
# ---
# jupyter:
# jupytext_format_version: '1.2'
# kernelspec:
# display_name: Python 3
# language: python
# name: python3
# language_info:
# codemirror_mode:
# name: ipython
# version: 3
# file_extension: .py
# mimetype: text/x-python
# name: python
# nbconvert_exporter: python
# pygments_lexer: ipython3
# version: 3.5.2
# ---

# # ResNet
# 当大家还在惊叹 GoogLeNet 的 inception 结构的时候,微软亚洲研究院的研究员已经在设计更深但结构更加简单的网络 ResNet,并且凭借这个网络子在 2015 年 ImageNet 比赛上大获全胜。
#
# ResNet 有效地解决了深度神经网络难以训练的问题,可以训练高达 1000 层的卷积网络。网络之所以难以训练,是因为存在着梯度消失的问题,离 loss 函数越远的层,在反向传播的时候,梯度越小,就越难以更新,随着层数的增加,这个现象越严重。之前有两种常见的方案来解决这个问题:
#
# 1.按层训练,先训练比较浅的层,然后在不断增加层数,但是这种方法效果不是特别好,而且比较麻烦
#
# 2.使用更宽的层,或者增加输出通道,而不加深网络的层数,这种结构往往得到的效果又不好
#
# ResNet 通过引入了跨层链接解决了梯度回传消失的问题。
#
# ![](https://ws1.sinaimg.cn/large/006tNc79ly1fmptq2snv9j30j808t74a.jpg)

# 这就普通的网络连接跟跨层残差连接的对比图,使用普通的连接,上层的梯度必须要一层一层传回来,而是用残差连接,相当于中间有了一条更短的路,梯度能够从这条更短的路传回来,避免了梯度过小的情况。
#
# 假设某层的输入是 x,期望输出是 H(x), 如果我们直接把输入 x 传到输出作为初始结果,这就是一个更浅层的网络,更容易训练,而这个网络没有学会的部分,我们可以使用更深的网络 F(x) 去训练它,使得训练更加容易,最后希望拟合的结果就是 F(x) = H(x) - x,这就是一个残差的结构
#
# 残差网络的结构就是上面这种残差块的堆叠,下面让我们来实现一个 residual block

# + {"ExecuteTime": {"end_time": "2017-12-22T12:56:06.772059Z", "start_time": "2017-12-22T12:56:06.766027Z"}}
import sys
sys.path.append('..')

import numpy as np
import torch
from torch import nn
import torch.nn.functional as F
from torch.autograd import Variable
from torchvision.datasets import CIFAR10

# + {"ExecuteTime": {"end_time": "2017-12-22T12:47:49.222432Z", "start_time": "2017-12-22T12:47:49.217940Z"}}
def conv3x3(in_channel, out_channel, stride=1):
return nn.Conv2d(in_channel, out_channel, 3, stride=stride, padding=1, bias=False)

# + {"ExecuteTime": {"end_time": "2017-12-22T13:14:02.429145Z", "start_time": "2017-12-22T13:14:02.383322Z"}}
class residual_block(nn.Module):
def __init__(self, in_channel, out_channel, same_shape=True):
super(residual_block, self).__init__()
self.same_shape = same_shape
stride=1 if self.same_shape else 2
self.conv1 = conv3x3(in_channel, out_channel, stride=stride)
self.bn1 = nn.BatchNorm2d(out_channel)
self.conv2 = conv3x3(out_channel, out_channel)
self.bn2 = nn.BatchNorm2d(out_channel)
if not self.same_shape:
self.conv3 = nn.Conv2d(in_channel, out_channel, 1, stride=stride)
def forward(self, x):
out = self.conv1(x)
out = F.relu(self.bn1(out), True)
out = self.conv2(out)
out = F.relu(self.bn2(out), True)
if not self.same_shape:
x = self.conv3(x)
return F.relu(x+out, True)
# -

# 我们测试一下一个 residual block 的输入和输出

# + {"ExecuteTime": {"end_time": "2017-12-22T13:14:05.793185Z", "start_time": "2017-12-22T13:14:05.763382Z"}}
# 输入输出形状相同
test_net = residual_block(32, 32)
test_x = Variable(torch.zeros(1, 32, 96, 96))
print('input: {}'.format(test_x.shape))
test_y = test_net(test_x)
print('output: {}'.format(test_y.shape))

# + {"ExecuteTime": {"end_time": "2017-12-22T13:14:11.929120Z", "start_time": "2017-12-22T13:14:11.914604Z"}}
# 输入输出形状不同
test_net = residual_block(3, 32, False)
test_x = Variable(torch.zeros(1, 3, 96, 96))
print('input: {}'.format(test_x.shape))
test_y = test_net(test_x)
print('output: {}'.format(test_y.shape))
# -

# 下面我们尝试实现一个 ResNet,它就是 residual block 模块的堆叠

# + {"ExecuteTime": {"end_time": "2017-12-22T13:27:46.099404Z", "start_time": "2017-12-22T13:27:45.986235Z"}}
class resnet(nn.Module):
def __init__(self, in_channel, num_classes, verbose=False):
super(resnet, self).__init__()
self.verbose = verbose
self.block1 = nn.Conv2d(in_channel, 64, 7, 2)
self.block2 = nn.Sequential(
nn.MaxPool2d(3, 2),
residual_block(64, 64),
residual_block(64, 64)
)
self.block3 = nn.Sequential(
residual_block(64, 128, False),
residual_block(128, 128)
)
self.block4 = nn.Sequential(
residual_block(128, 256, False),
residual_block(256, 256)
)
self.block5 = nn.Sequential(
residual_block(256, 512, False),
residual_block(512, 512),
nn.AvgPool2d(3)
)
self.classifier = nn.Linear(512, num_classes)
def forward(self, x):
x = self.block1(x)
if self.verbose:
print('block 1 output: {}'.format(x.shape))
x = self.block2(x)
if self.verbose:
print('block 2 output: {}'.format(x.shape))
x = self.block3(x)
if self.verbose:
print('block 3 output: {}'.format(x.shape))
x = self.block4(x)
if self.verbose:
print('block 4 output: {}'.format(x.shape))
x = self.block5(x)
if self.verbose:
print('block 5 output: {}'.format(x.shape))
x = x.view(x.shape[0], -1)
x = self.classifier(x)
return x
# -

# 输出一下每个 block 之后的大小

# + {"ExecuteTime": {"end_time": "2017-12-22T13:28:00.597030Z", "start_time": "2017-12-22T13:28:00.417746Z"}}
test_net = resnet(3, 10, True)
test_x = Variable(torch.zeros(1, 3, 96, 96))
test_y = test_net(test_x)
print('output: {}'.format(test_y.shape))

# + {"ExecuteTime": {"end_time": "2017-12-22T13:29:01.484172Z", "start_time": "2017-12-22T13:29:00.095952Z"}}
from utils import train

def data_tf(x):
x = x.resize((96, 96), 2) # 将图片放大到 96 x 96
x = np.array(x, dtype='float32') / 255
x = (x - 0.5) / 0.5 # 标准化,这个技巧之后会讲到
x = x.transpose((2, 0, 1)) # 将 channel 放到第一维,只是 pytorch 要求的输入方式
x = torch.from_numpy(x)
return x
train_set = CIFAR10('./data', train=True, transform=data_tf)
train_data = torch.utils.data.DataLoader(train_set, batch_size=64, shuffle=True)
test_set = CIFAR10('./data', train=False, transform=data_tf)
test_data = torch.utils.data.DataLoader(test_set, batch_size=128, shuffle=False)

net = resnet(3, 10)
optimizer = torch.optim.SGD(net.parameters(), lr=0.01)
criterion = nn.CrossEntropyLoss()

# + {"ExecuteTime": {"end_time": "2017-12-22T13:45:00.783186Z", "start_time": "2017-12-22T13:29:09.214453Z"}}
train(net, train_data, test_data, 20, optimizer, criterion)
# -

# ResNet 使用跨层通道使得训练非常深的卷积神经网络成为可能。同样它使用很简单的卷积层配置,使得其拓展更加简单。
#
# **小练习:
# 1.尝试一下论文中提出的 bottleneck 的结构
# 2.尝试改变 conv -> bn -> relu 的顺序为 bn -> relu -> conv,看看精度会不会提高**

BIN
2_pytorch/imgs/Ipython-auto.png View File

Before After
Width: 252  |  Height: 91  |  Size: 1.7 kB

BIN
2_pytorch/imgs/Ipython-help.png View File

Before After
Width: 484  |  Height: 227  |  Size: 5.5 kB

BIN
2_pytorch/imgs/Jupyter主页面.png View File

Before After
Width: 1154  |  Height: 441  |  Size: 30 kB

BIN
2_pytorch/imgs/Notebook主界面.png View File

Before After
Width: 1157  |  Height: 370  |  Size: 48 kB

BIN
2_pytorch/imgs/autograd_Variable.png View File

Before After
Width: 184  |  Height: 125  |  Size: 4.5 kB

+ 2
- 0
2_pytorch/imgs/autograd_Variable.svg View File

@@ -0,0 +1,2 @@
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="231px" height="231px" version="1.1" content="&lt;mxfile userAgent=&quot;Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.35&quot; version=&quot;7.5.4&quot; editor=&quot;www.draw.io&quot;&gt;&lt;diagram id=&quot;07382e78-ac41-cbda-a75f-370a405a7521&quot; name=&quot;第 1 页&quot;&gt;1ZZdb5swFIZ/DZebwCYkuWyytruZNCnSdjk52IBVg5kxg+zX7xjMhwtVWy2RttzEfo99fPw+NuDhY94+KlJmXyRlwkM+bT38yUMoCPwt/Bnl0is7tO+FVHFqB03Cif9mVvStWnPKKmegllJoXrpiLIuCxdrRiFKycYclUrirliRlC+EUE7FUv3Oqs2EX20n/zHiaDSsHkd3fmcRPqZJ1YdfzEE66Xx/OyZDLbrTKCJXNTML3Hj4qKXXfytsjE8bbwbZ+3sML0bFuxQr9lgmon/CLiJoNFXd16cvgRZNxzU4liU2/Ad4ePmQ6F9ALoEmqsieQ8JZB1kPChThKIVU33WwfxTHolVbyic0iNDpHmwgilFSZmdrlswUxpVn74qaC0So4gkzmTKsLDLETUGTdtacP7Wy/mViORy2bcRxFYs9POuaePISGtXHdUrxiaSS0cUZC/XNvo5+1HAIfqu4W3MGAYFe2UxBaqe5c0mTIBDX0yfrQgll3AkdLXyHo2G86X4nWTBWdgvzwSlD2GwcKjpZQos2SSXgFJOGNkKSK0P8YCd75ryLZrlyTayDZ3BDJj6R4PxX/n6GCXCohWlLZ3+iiRH9NBYVrVEitpSHz8RtRnJwhxRv5gI3aheC+RgpZsGfvHCsRwVNDJgbbGegHA4XDK/7OBnJOqVlmlbqD2lRov1GQf6Wn4fbZ1fOXkIP9yt3D76cM3emDoovNvtrw/R8=&lt;/diagram&gt;&lt;/mxfile&gt;"><defs/><g transform="translate(0.5,0.5)"><rect x="10" y="10" width="210" height="210" fill="#fff2cc" stroke="#d6b656" stroke-dasharray="3 3" pointer-events="none"/><rect x="45" y="90" width="65" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" stroke-dasharray="1 4" pointer-events="none"/><g transform="translate(59.5,100.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="35" height="19" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 37px; white-space: nowrap; word-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><font style="font-size: 18px">data</font></div></div></foreignObject><text x="18" y="16" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="130" y="90" width="70" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" stroke-dasharray="1 4" pointer-events="none"/><g transform="translate(146.5,100.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="36" height="19" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 38px; white-space: nowrap; word-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><font style="font-size: 18px">grad</font></div></div></foreignObject><text x="18" y="16" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="70" y="150" width="95" height="40" fill="#ffffff" stroke="#000000" stroke-dasharray="1 4" pointer-events="none"/><g transform="translate(86.5,160.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="61" height="19" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 63px; white-space: nowrap; word-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><font style="font-size: 18px">grad_fn</font></div></div></foreignObject><text x="31" y="16" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><g transform="translate(21.5,31.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="187" height="26" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 189px; white-space: nowrap; word-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><font style="font-size: 24px">autograd.Variable</font></div></div></foreignObject><text x="94" y="23" fill="#000000" text-anchor="middle" font-size="20px" font-family="Helvetica">[Not supported by viewer]</text></switch></g></g></svg>

BIN
2_pytorch/imgs/del/img1.png View File

Before After
Width: 966  |  Height: 363  |  Size: 56 kB

BIN
2_pytorch/imgs/del/img2.png View File

Before After
Width: 996  |  Height: 391  |  Size: 57 kB

BIN
2_pytorch/imgs/install-1.png View File

Before After
Width: 1202  |  Height: 512  |  Size: 88 kB

BIN
2_pytorch/imgs/install-2.png View File

Before After
Width: 1212  |  Height: 431  |  Size: 68 kB

BIN
2_pytorch/imgs/nn_lenet.png View File

Before After
Width: 759  |  Height: 209  |  Size: 17 kB

+ 52
- 9
README.md View File

@@ -1,19 +1,62 @@
# Python和机器学习的notebook
# Python与机器学习

notebook教程包含了一些使用Python来学习机器学习的教程,通过本教程能够引导学习Python的基础知识和机器学习的背景和实际编程
本教程包含了一些使用Python来学习机器学习的notebook,通过本教程能够引导学习Python的基础知识和机器学习的理论知识和实际编程,并学习如何解决实际问题

由于本课程需要大量的编程练习才能取得比较好的学习效果,因此需要认真把作业和报告完成。作业的地址是:https://gitee.com/machinelearning2018/pr_homework 请按照里面的说明进行操作。
由于**本课程需要大量的编程练习才能取得比较好的学习效果**,因此需要认真把作业和报告完成。作业的地址是:https://gitee.com/machinelearning2018/pr_homework 请按照里面的说明进行操作。


## 内容
1. [Python基础](0_python/)
1. [Python](0_python/)
- [Introduction](0_python/0_Introduction.ipynb)
- [Python Basics](0_python/1_Basics.ipynb)
- [Print Statement](0_python/2_Print_Statement.ipynb)
- [Data Structure 1](0_python/3_Data_Structure_1.ipynb)
- [Data Structure 2](0_python/4_Data_Structure_2.ipynb)
- [Control Flow](0_python/5_Control_Flow.ipynb)
- [Function](0_python/6_Function.ipynb)
- [Class](0_python/7_Class.ipynb)
2. [numpy & matplotlib](0_numpy_matplotlib_scipy_sympy/)
3. [kMenas](1_kmeans/)
4. [knn](1_knn/)
- [numpy](0_numpy_matplotlib_scipy_sympy/numpy_tutorial.ipynb)
- [matplotlib](0_numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.ipynb)
3. [knn](1_knn/knn_classification.ipynb)
4. [kMenas](1_kmeans/knn_classification.ipynb)
5. [Logistic Regression](1_logistic_regression/)
6. [Neural Network](nn/)
7. CNN
8. PyTorch
- [Least squares](1_logistic_regression/Least_squares.ipynb)
- [Logistic regression](1_logistic_regression/Logistic_regression.ipynb)
6. [Neural Network](1_nn/)
- [Perceptron](1_nn/Perceptron.ipynb)
- [Multi-layer Perceptron & BP](1_nn/mlp_bp.ipynb)
- [Softmax & cross-entroy](1_nn/softmax_ce.ipynb)
7. [PyTorch](2_pytorch/)
- [short tutorial](PyTorch快速入门.ipynb)
- [basic/Tensor-and-Variable](2_pytorch/0_basic/Tensor-and-Variable.ipynb)
- [basic/autograd](2_pytorch/0_basic/autograd.ipynb)
- [basic/dynamic-graph](2_pytorch/0_basic/dynamic-graph.ipynb)
- [nn/linear-regression-gradient-descend](2_pytorch/1_NN/linear-regression-gradient-descend.ipynb)
- [nn/logistic-regression](2_pytorch/1_NN/logistic-regression.ipynb)
- [nn/nn-sequential-module](2_pytorch/1_NN/nn-sequential-module.ipynb)
- [nn/bp](2_pytorch/1_NN/bp.ipynb)
- [nn/deep-nn](2_pytorch/1_NN/deep-nn.ipynb)
- [nn/param_initialize](2_pytorch/1_NN/param_initialize.ipynb)
- [optim/sgd](2_pytorch/1_NN/optimizer/sgd.ipynb)
- [optim/adam](2_pytorch/1_NN/optimizer/adam.ipynb)
- [optim/adam](2_pytorch/1_NN/optimizer/adam.ipynb)
- [cnn/basic_conv](2_pytorch/2_CNN/basic_conv.ipynb)
- [cnn/batch-normalization](2_pytorch/2_CNN/batch-normalization.ipynb)
- [cnn/regularization](2_pytorch/2_CNN/regularization.ipynb)
- [cnn/lr-decay](2_pytorch/2_CNN/lr-decay.ipynb)
- [cnn/vgg](2_pytorch/2_CNN/vgg.ipynb)
- [cnn/googlenet](2_pytorch/2_CNN/googlenet.ipynb)
- [cnn/densenet](2_pytorch/2_CNN/densenet.ipynb)
- [cnn/resnet](2_pytorch/2_CNN/resnet.ipynb)
- [rnn/pytorch-rnn](2_pytorch/3_RNN/pytorch-rnn.ipynb)
- [rnn/rnn-for-image](2_pytorch/3_RNN/rnn-for-image.ipynb)
- [rnn/lstm-time-series](2_pytorch/3_RNN/time-series/lstm-time-series.ipynb)
- [gan/autoencoder](2_pytorch/4_GNN/autoencoder.ipynb)
- [gan/vae](2_pytorch/4_GNN/vae.ipynb)
- [gan/gan](2_pytorch/4_GNN/gan.ipynb)



## 其他参考
* [学习参考资料等](References.md)


+ 19
- 0
References.md View File

@@ -1,3 +1,22 @@
---
jupyter:
jupytext_format_version: '1.0'
kernelspec:
display_name: Python 3
language: python
name: python3
language_info:
codemirror_mode:
name: ipython
version: 3
file_extension: .py
mimetype: text/x-python
name: python
nbconvert_exporter: python
pygments_lexer: ipython3
version: 3.5.2
---

# References
可以自行在下属列表找找到适合自己的学习资料,虽然罗列的比较多,但是个人最好选择一个深入阅读、练习。当练习到一定程度,可以再看看其他的资料,这样弥补单一学习资料可能存在的欠缺。



+ 0
- 400
dataset_circle.csv View File

@@ -1,400 +0,0 @@
-4.998874451622919324e+00,4.727671430051504586e+00,0.000000000000000000e+00
3.280980164418858092e+00,1.135719744099867690e+01,0.000000000000000000e+00
-3.989307577792735593e+00,-7.472125124436091781e+00,0.000000000000000000e+00
-2.845588117474840750e+00,-1.110207598677712149e+01,0.000000000000000000e+00
-4.736524057786282604e+00,-9.232347813516641466e+00,0.000000000000000000e+00
-2.997596049424991360e+00,1.045323111011670036e+01,0.000000000000000000e+00
-7.808569372236178197e+00,6.841137640119772101e+00,0.000000000000000000e+00
4.719962553632155000e+00,-5.946625096098887120e+00,0.000000000000000000e+00
-8.270798405113193752e+00,1.027792682624399490e+01,0.000000000000000000e+00
4.232628995836200114e-01,-1.335784821899873975e+01,0.000000000000000000e+00
4.893887192102374328e+00,5.486359338973567645e+00,0.000000000000000000e+00
1.953078035901100407e+00,-1.100069524628494300e+01,0.000000000000000000e+00
-9.639984273015738125e+00,-2.957480661280089684e+00,0.000000000000000000e+00
-9.937439807849466789e+00,-8.269310082917247229e+00,0.000000000000000000e+00
2.204734939814951833e+00,-6.357260901975879008e+00,0.000000000000000000e+00
1.274217189544729223e+01,1.841748008125298375e+00,0.000000000000000000e+00
5.672242663876837732e+00,2.330635774766193880e+00,0.000000000000000000e+00
-7.338456675417745600e+00,1.882312145323686847e+00,0.000000000000000000e+00
-6.947515164920790021e+00,-3.658284293516441021e+00,0.000000000000000000e+00
7.088187308453501423e+00,6.263413958397093140e+00,0.000000000000000000e+00
-1.039295836199625001e+01,-2.962603920087568010e+00,0.000000000000000000e+00
5.002046571685252019e+00,-3.644062366457090807e+00,0.000000000000000000e+00
8.067419960052502503e+00,-8.443685884446271217e+00,0.000000000000000000e+00
1.549263958387518736e+00,1.360545642744239636e+01,0.000000000000000000e+00
-1.010119265227723773e+01,-2.928519634527351201e+00,0.000000000000000000e+00
4.048415111200645455e+00,1.042218191509591740e+01,0.000000000000000000e+00
-5.880502261005368103e-01,-9.966963114333513118e+00,0.000000000000000000e+00
-9.471879751092165733e+00,7.246321559295248349e+00,0.000000000000000000e+00
-5.527486155535233259e+00,-4.540557681865953654e+00,0.000000000000000000e+00
4.659675372099115087e+00,8.202590460146153006e+00,0.000000000000000000e+00
1.269023913615559707e+01,-5.416295582522442587e+00,0.000000000000000000e+00
-2.724914602202719749e+00,1.086205270915533028e+01,0.000000000000000000e+00
3.492062621369136366e+00,4.941165814379694154e+00,0.000000000000000000e+00
-1.136297094437039767e+01,-4.418309032965443528e+00,0.000000000000000000e+00
-6.610445400535019722e+00,-4.723850967144393564e+00,0.000000000000000000e+00
2.945875049475957130e+00,5.421645755190175997e+00,0.000000000000000000e+00
8.441152467024686246e+00,-5.733949763032617497e+00,0.000000000000000000e+00
-5.337748568820175343e+00,-2.894641349143626474e+00,0.000000000000000000e+00
-5.638657441343185361e+00,6.371912940018310323e+00,0.000000000000000000e+00
5.219543579234116493e+00,8.655948521272765817e+00,0.000000000000000000e+00
1.137404405700222121e+01,-7.990877338269509744e-01,0.000000000000000000e+00
-1.102521847936960953e+01,-4.463209620181475934e+00,0.000000000000000000e+00
-4.426607752755420400e+00,-1.107485746787114422e+01,0.000000000000000000e+00
8.947435686205526650e+00,-2.652579411969618217e+00,0.000000000000000000e+00
-5.804551086860440634e+00,1.651285937035928297e+00,0.000000000000000000e+00
8.022634490760131243e+00,-3.328905071455355191e+00,0.000000000000000000e+00
9.797034373218822978e+00,-2.398353279354699996e+00,0.000000000000000000e+00
4.101084418772985352e+00,-7.770073879622331425e+00,0.000000000000000000e+00
-1.097037941212336420e+01,2.691560463736894171e+00,0.000000000000000000e+00
-8.493626604162708205e+00,4.028866188921357505e+00,0.000000000000000000e+00
-1.808727426346540934e+00,6.373654750199562180e+00,0.000000000000000000e+00
-1.134703599947220809e+00,1.372231898814027851e+01,0.000000000000000000e+00
-9.244121242406452055e+00,-5.781992459050565358e+00,0.000000000000000000e+00
-5.759426131918345071e+00,7.205510239047915988e+00,0.000000000000000000e+00
3.771520479958048622e+00,8.565896745900721143e+00,0.000000000000000000e+00
-4.727725223740230076e-01,8.226683007907888978e+00,0.000000000000000000e+00
-1.308436146490704033e+01,2.159635187474379103e-01,0.000000000000000000e+00
1.316991133438216721e+01,-8.577077144100451189e-01,0.000000000000000000e+00
3.762476688091432209e+00,6.329839531959273735e+00,0.000000000000000000e+00
1.168475182553070368e+00,7.772573409341900330e+00,0.000000000000000000e+00
-1.152090613329429480e+01,-9.232442486441853058e-01,0.000000000000000000e+00
4.893098057671737777e+00,7.230378368552453416e+00,0.000000000000000000e+00
4.147691247562475425e+00,-4.945226037571873512e+00,0.000000000000000000e+00
-7.615234893199520627e-01,-1.065069682138725682e+01,0.000000000000000000e+00
4.593746251898513044e+00,-3.971878474045261065e+00,0.000000000000000000e+00
8.332067227771284834e+00,-1.081294914826669462e+01,0.000000000000000000e+00
-1.281878411831117059e+00,6.151739151774008540e+00,0.000000000000000000e+00
1.549020274643722273e+00,8.475746236493849395e+00,0.000000000000000000e+00
-1.312835432164462723e+01,2.895890781775360079e+00,0.000000000000000000e+00
-6.879674869024260175e+00,-6.005871464642620339e+00,0.000000000000000000e+00
7.120206196569053958e+00,4.267492581920733663e+00,0.000000000000000000e+00
-3.676623883394837478e+00,-8.327347687527096198e+00,0.000000000000000000e+00
9.950339284853116695e+00,-1.780878495316860821e+00,0.000000000000000000e+00
-1.044089542954608696e+01,-3.512136861383201580e+00,0.000000000000000000e+00
-7.587104265706257067e+00,3.587490533294854345e+00,0.000000000000000000e+00
6.643156192343808719e+00,7.106449819699371950e+00,0.000000000000000000e+00
7.477250685200753644e+00,-2.444484379289254328e+00,0.000000000000000000e+00
4.528212169753472516e+00,8.752891696925013676e+00,0.000000000000000000e+00
-5.910210499914843041e+00,-3.866998159937307111e+00,0.000000000000000000e+00
1.096992004135587395e+00,-1.000681800365598662e+01,0.000000000000000000e+00
1.151043259372304028e+01,-3.110479095656271564e+00,0.000000000000000000e+00
8.994094857683874622e+00,-1.028508523539741981e+00,0.000000000000000000e+00
4.575858771396155156e+00,-4.844852238217020712e+00,0.000000000000000000e+00
-6.506141747505763462e+00,-2.082806902950740113e+00,0.000000000000000000e+00
3.632653413182652002e+00,-1.250445496171638560e+01,0.000000000000000000e+00
9.015220625644202457e+00,1.356044413526625192e+00,0.000000000000000000e+00
-7.909640480474056545e+00,-2.443660342431176691e+00,0.000000000000000000e+00
-1.093311130711816626e+00,-6.805586551288273611e+00,0.000000000000000000e+00
5.468924148717472455e+00,3.047967598152591773e+00,0.000000000000000000e+00
-1.700676425797274849e+00,-7.473472989986249537e+00,0.000000000000000000e+00
-8.153665412746766705e+00,-5.307423884028198202e+00,0.000000000000000000e+00
-1.019420405459193368e+01,7.026817204704700615e+00,0.000000000000000000e+00
1.216291369840269532e+01,-2.095522204463549087e+00,0.000000000000000000e+00
-7.232498227553167958e+00,3.445633673154797627e-01,0.000000000000000000e+00
1.281345232435039350e+01,-2.067891205217199158e+00,0.000000000000000000e+00
9.142160522178615523e+00,-3.160438550644457945e-02,0.000000000000000000e+00
-9.816955137377885166e+00,2.799259632922912466e-01,0.000000000000000000e+00
4.962398314995689064e-01,-6.135477824292228100e+00,0.000000000000000000e+00
9.671712713236194858e+00,8.370515179846837128e+00,0.000000000000000000e+00
-9.043606859436660983e+00,-6.141375555264566799e+00,0.000000000000000000e+00
7.471351966036366976e-01,7.518586880851066745e+00,0.000000000000000000e+00
8.799592298693627024e-01,-7.514435376619853280e+00,0.000000000000000000e+00
4.941070586263158759e+00,1.157869751130275837e+01,0.000000000000000000e+00
-9.570150782095817377e+00,3.896718735961908209e+00,0.000000000000000000e+00
-6.314182668230160722e+00,-4.111016220677472965e+00,0.000000000000000000e+00
-1.339481700536117970e+01,-1.135787832288092769e+00,0.000000000000000000e+00
-3.057627345888538795e+00,-7.906936284528271131e+00,0.000000000000000000e+00
1.275489779531916001e+00,-9.288886973141030623e+00,0.000000000000000000e+00
3.280352073779522648e+00,-7.709132013091286595e+00,0.000000000000000000e+00
7.258123743653465354e+00,-5.330867587024999743e+00,0.000000000000000000e+00
4.887062318871694622e+00,5.317808164698954343e+00,0.000000000000000000e+00
1.006412918815497726e+01,7.663376319592393848e+00,0.000000000000000000e+00
2.146177544892221789e+00,6.797864555657393559e+00,0.000000000000000000e+00
6.570671589026503945e+00,-1.126975629116406807e+01,0.000000000000000000e+00
-6.977889121586767551e+00,-2.331833796503289147e+00,0.000000000000000000e+00
-5.690598708789069704e+00,-5.597086784482708133e+00,0.000000000000000000e+00
1.605452239709390216e+00,6.464934684315307933e+00,0.000000000000000000e+00
3.470972688576804410e-01,-1.327648582649006315e+01,0.000000000000000000e+00
-7.381144288304149370e+00,-5.156481056563678500e+00,0.000000000000000000e+00
5.113305246413767158e+00,-4.310394641097014201e+00,0.000000000000000000e+00
-2.447502200939821293e+00,7.939592051454749111e+00,0.000000000000000000e+00
-3.404168412622622153e+00,-6.832636952280327414e+00,0.000000000000000000e+00
1.286861594932697983e+01,1.553966184507693526e+00,0.000000000000000000e+00
5.278860659561945390e+00,-6.430051460428339638e+00,0.000000000000000000e+00
6.953973998717738247e+00,1.220882956250419982e+00,0.000000000000000000e+00
1.078929647857148177e+00,-1.140119287293926220e+01,0.000000000000000000e+00
1.021467857395671608e+01,8.816393293395096364e+00,0.000000000000000000e+00
-6.500414765761497016e+00,1.097869475334080747e+01,0.000000000000000000e+00
-4.075595160844034837e+00,-1.022701785461823221e+01,0.000000000000000000e+00
-1.261518294439356325e+01,2.352661249397130838e+00,0.000000000000000000e+00
-2.092561453918301950e+00,5.649800285934039934e+00,0.000000000000000000e+00
-8.395172554026888889e+00,-7.355336662870007203e+00,0.000000000000000000e+00
1.011894580495321350e+01,2.863287385767578463e+00,0.000000000000000000e+00
6.440098975491926225e+00,5.407937306238225439e+00,0.000000000000000000e+00
1.009390009280021516e+01,-2.697672104953574124e+00,0.000000000000000000e+00
-1.095974568393570259e+01,-2.320042133815701568e+00,0.000000000000000000e+00
-5.435323914030652404e+00,3.608832268612751637e+00,0.000000000000000000e+00
-8.181796103407455334e+00,-7.169572693476187197e+00,0.000000000000000000e+00
-6.335249672604938986e+00,-5.851649364801576603e+00,0.000000000000000000e+00
4.725674889291250125e+00,-9.044469885217635508e+00,0.000000000000000000e+00
-4.174975972142638270e+00,6.469189355518081719e+00,0.000000000000000000e+00
-1.768292579955591748e+00,7.895050617972255047e+00,0.000000000000000000e+00
-6.743092747917891927e+00,-9.674488283785420251e+00,0.000000000000000000e+00
-6.051758168185039644e+00,-1.384417078025135472e+00,0.000000000000000000e+00
5.912571656871686621e+00,-1.019552467938347640e+01,0.000000000000000000e+00
-1.073662372628176698e+01,-1.094455982713069986e+00,0.000000000000000000e+00
1.920758615137001968e+00,1.060249196062641985e+01,0.000000000000000000e+00
9.492285482622786930e+00,7.457027651813548097e+00,0.000000000000000000e+00
-1.178837417661738307e+01,-8.983810015540972804e-01,0.000000000000000000e+00
6.616842638292316003e+00,-1.145307128001671515e+01,0.000000000000000000e+00
2.344242967842403491e+00,-1.364175232190520859e+01,0.000000000000000000e+00
7.219096291116632536e+00,-7.103202178555553026e+00,0.000000000000000000e+00
-1.137473544795068570e+01,1.042017704631689634e+00,0.000000000000000000e+00
-2.210492883793041541e-01,-1.071494952087631880e+01,0.000000000000000000e+00
4.999402767739136166e+00,-5.249282848981218663e+00,0.000000000000000000e+00
3.939925020599769123e+00,-1.014326764954310889e+01,0.000000000000000000e+00
1.967794675705813345e+00,1.035465999425737138e+01,0.000000000000000000e+00
-9.418445435815625544e+00,8.979913989156472098e+00,0.000000000000000000e+00
6.793123870613265503e+00,4.092999160136503889e+00,0.000000000000000000e+00
6.637993214199637393e+00,1.116046204208427639e+01,0.000000000000000000e+00
-6.015608161107520502e+00,8.315042120086134636e-01,0.000000000000000000e+00
-9.790667573649734834e+00,-4.261491078660923471e+00,0.000000000000000000e+00
3.008684550809284541e+00,5.953626021472883778e+00,0.000000000000000000e+00
4.616311169846965434e+00,7.725254513146059487e+00,0.000000000000000000e+00
-2.667078671430157755e+00,-6.347007249127237571e+00,0.000000000000000000e+00
-1.748592270990125819e+00,-1.315744297437313826e+01,0.000000000000000000e+00
5.955252033533550815e+00,-1.251728734987527325e+01,0.000000000000000000e+00
-2.612533043388519438e+00,7.133476364554665494e+00,0.000000000000000000e+00
1.017407247111040647e+01,4.247446167669684414e+00,0.000000000000000000e+00
6.914675549487817818e+00,4.127373010422411781e+00,0.000000000000000000e+00
6.670636317220846934e+00,-5.641487655987883265e+00,0.000000000000000000e+00
1.062615644813485893e+01,6.244424228562758472e+00,0.000000000000000000e+00
-6.169791600437800838e+00,1.249748440142003092e-01,0.000000000000000000e+00
-7.001930132629896608e-01,1.300760470713475492e+01,0.000000000000000000e+00
-6.558321900875884403e+00,-9.204213866524561638e+00,0.000000000000000000e+00
8.011083353997189960e+00,-6.049473945953777410e+00,0.000000000000000000e+00
-1.074271129719204154e+01,-7.633397329542090048e+00,0.000000000000000000e+00
-3.984045586971812103e+00,1.324391982032081394e+01,0.000000000000000000e+00
5.827998652509109867e+00,-3.571306546452413855e+00,0.000000000000000000e+00
-8.273398101851878295e+00,-1.313277757722923100e+00,0.000000000000000000e+00
-9.089064650206521989e+00,2.386460797472218065e+00,0.000000000000000000e+00
-6.117237918351078108e+00,-8.230725593702798548e+00,0.000000000000000000e+00
-9.310494051367378177e+00,2.892141468064257204e+00,0.000000000000000000e+00
-5.420112423056186124e+00,8.342523568701238901e+00,0.000000000000000000e+00
-1.251767095133966379e+01,6.603965812677897729e-01,0.000000000000000000e+00
8.875409740472520737e-01,7.898399394405656970e+00,0.000000000000000000e+00
-1.225465649316174144e+01,-3.777333531207176076e+00,0.000000000000000000e+00
6.587892908968072447e+00,1.127849124532697722e+01,0.000000000000000000e+00
-5.980199324871170674e+00,7.456243975428951565e+00,0.000000000000000000e+00
1.035424594893476957e+01,-4.484098136654492528e+00,0.000000000000000000e+00
-7.117476147145587184e+00,-2.819048408111779480e+00,0.000000000000000000e+00
1.990785706505008301e+00,1.137971089662191915e+01,0.000000000000000000e+00
-6.629990058126231212e+00,5.812540358407785046e-01,0.000000000000000000e+00
6.010091945071859953e+00,1.134266418530905440e+01,0.000000000000000000e+00
1.563540700463055710e+00,6.582003958354652795e+00,0.000000000000000000e+00
8.471557189942037880e+00,-1.050544525914208371e+01,0.000000000000000000e+00
-6.598986063527275014e+00,5.693582969311762554e+00,0.000000000000000000e+00
8.433219563542468933e+00,1.067163321165924827e+01,0.000000000000000000e+00
-1.011285137769216469e+00,-1.219545555001986692e+01,0.000000000000000000e+00
1.256727699257306696e+01,4.797924561371654129e+00,0.000000000000000000e+00
-1.276828523536011062e+01,1.485427257184312921e+01,1.000000000000000000e+00
2.200700553643587298e+01,-5.109980858152146865e+00,1.000000000000000000e+00
-9.015832319879871548e+00,1.357709172587320268e+01,1.000000000000000000e+00
-2.064308479232057536e+01,7.683059398107904947e+00,1.000000000000000000e+00
-1.305339087233159923e+01,-1.377770214506358393e+01,1.000000000000000000e+00
-1.058198473565134279e+01,-1.579210776112037529e+01,1.000000000000000000e+00
2.159085522882962405e+00,-2.214526860726335045e+01,1.000000000000000000e+00
-1.595555611141086949e+01,3.847374159362159318e+00,1.000000000000000000e+00
5.755892792673394709e+00,1.792719959809483399e+01,1.000000000000000000e+00
-4.094655249023293919e+00,1.865674575281047964e+01,1.000000000000000000e+00
1.504545607498590343e+01,1.322977627698143444e+01,1.000000000000000000e+00
1.335157567066028683e+01,-1.583800419058930764e+01,1.000000000000000000e+00
2.090538629015262995e+00,2.071601112544702517e+01,1.000000000000000000e+00
2.155108918382654792e+01,-6.819970876788357117e+00,1.000000000000000000e+00
-3.361885513320386654e+00,1.988966673833889232e+01,1.000000000000000000e+00
-5.238828304327662444e+00,1.735666652802654752e+01,1.000000000000000000e+00
1.456437564020385089e+01,-1.256431224170169259e+01,1.000000000000000000e+00
-4.279457049842544158e+00,2.024711507538967226e+01,1.000000000000000000e+00
4.132355925210051129e-01,-2.210281011416533303e+01,1.000000000000000000e+00
-6.173948251655802189e+00,1.953225177250030242e+01,1.000000000000000000e+00
1.459888528231329197e+01,1.196973099346357117e+01,1.000000000000000000e+00
1.236830105347152120e+01,1.329171622622360971e+01,1.000000000000000000e+00
-2.055370904116432484e+01,-1.157598573224092497e+01,1.000000000000000000e+00
-1.781228608768412158e+01,1.407428361796575444e+01,1.000000000000000000e+00
-2.613358396594463340e+00,2.212832006401573182e+01,1.000000000000000000e+00
-4.631552015612522055e+00,1.952227419708583156e+01,1.000000000000000000e+00
-4.054582766052930998e-01,-2.315968441188986660e+01,1.000000000000000000e+00
-2.130849784623066512e+01,-8.360471456003718771e+00,1.000000000000000000e+00
-2.096708169676974975e+01,3.065404221271932350e+00,1.000000000000000000e+00
1.012814990232144829e+01,-1.710688782558848686e+01,1.000000000000000000e+00
-1.886228044460812825e+01,1.456662412183641386e+01,1.000000000000000000e+00
2.054570922725679338e+01,1.016686516490931425e+01,1.000000000000000000e+00
-1.781356955563831335e+01,1.105794464820366940e+01,1.000000000000000000e+00
-1.882094142469163600e+01,9.571019884213677997e+00,1.000000000000000000e+00
1.686939636143700838e+01,1.151714783349403781e+01,1.000000000000000000e+00
-1.466159371937605904e+01,1.869999120055744513e+01,1.000000000000000000e+00
-2.095519182127504010e+01,-7.810257975450833889e+00,1.000000000000000000e+00
1.204168603507365276e+01,1.753305348385429241e+01,1.000000000000000000e+00
-1.309312824479403226e+01,-1.703502335051060967e+01,1.000000000000000000e+00
6.968530985563967661e+00,1.579289053832121326e+01,1.000000000000000000e+00
2.121143805124364690e+01,5.234705357933253644e-01,1.000000000000000000e+00
-1.136778824386126097e+01,1.202252461886451584e+01,1.000000000000000000e+00
-1.490653743586005042e+01,-1.065453467874318783e+01,1.000000000000000000e+00
5.930951893554082588e+00,1.966376798287095795e+01,1.000000000000000000e+00
-7.657447289550228797e-01,-2.365440412500549883e+01,1.000000000000000000e+00
1.713217863539989239e+01,-1.331740399435540567e+00,1.000000000000000000e+00
-2.094869365061085631e+01,8.666992258263725546e+00,1.000000000000000000e+00
1.120784009336820120e+01,1.524895954078855453e+01,1.000000000000000000e+00
1.544574850389397014e+01,1.622432746966154227e+01,1.000000000000000000e+00
2.203909906040028233e+01,-1.495473776473204897e+00,1.000000000000000000e+00
3.406917884280199260e+00,-1.700768942915551918e+01,1.000000000000000000e+00
2.243181081456949499e+01,-7.241367089152824121e+00,1.000000000000000000e+00
1.397256447919322397e+01,-8.970692032560323881e+00,1.000000000000000000e+00
1.630338607375047033e+01,-3.235311185947623791e+00,1.000000000000000000e+00
2.007865587243750838e+01,-1.045532713058078045e+01,1.000000000000000000e+00
1.674891793061967959e+01,1.693356669413548587e+01,1.000000000000000000e+00
-2.132668396060672933e+01,5.783349878735465355e-01,1.000000000000000000e+00
-1.522396895393467275e+01,8.202953318116103176e+00,1.000000000000000000e+00
-2.108761813887401360e+01,8.254358941623493706e+00,1.000000000000000000e+00
-1.158593976432672967e+01,-1.126428988269355536e+01,1.000000000000000000e+00
2.193240760554629887e+01,5.235388163497050051e+00,1.000000000000000000e+00
-1.249042635798417855e+01,-1.597925733075420851e+01,1.000000000000000000e+00
-1.327153600302076875e+01,1.886118178564102976e+01,1.000000000000000000e+00
-2.716096832198759969e-01,-2.053111234162230048e+01,1.000000000000000000e+00
1.870977268496434931e+01,-6.020128277491814117e+00,1.000000000000000000e+00
9.066026373681397743e+00,1.719833327737538653e+01,1.000000000000000000e+00
9.754901942293498607e+00,-2.150786139557243359e+01,1.000000000000000000e+00
5.225986557643799379e+00,-1.851730741620698595e+01,1.000000000000000000e+00
-2.221334423653201995e+01,-5.783879325424583939e+00,1.000000000000000000e+00
1.025710983522760777e+01,1.632071028313165328e+01,1.000000000000000000e+00
9.453048857471646471e+00,1.907210084750916224e+01,1.000000000000000000e+00
2.356904492282887631e+01,-1.535820206309244096e+00,1.000000000000000000e+00
9.596073309462024525e+00,-1.408881719444052649e+01,1.000000000000000000e+00
1.533715082237675809e+01,5.218041165941144754e+00,1.000000000000000000e+00
1.597941654644196952e+01,-3.199722811957190327e+00,1.000000000000000000e+00
7.710684179679512529e-02,-1.945941496300915929e+01,1.000000000000000000e+00
-1.635173025955581849e+01,-8.961664441019049576e+00,1.000000000000000000e+00
-1.726785969753059646e+01,1.110928181418177374e+01,1.000000000000000000e+00
-1.976827267544182476e+01,-5.801616282561767868e+00,1.000000000000000000e+00
1.720673118238611465e+01,1.380754320853958106e+01,1.000000000000000000e+00
-1.778215790803131213e+01,7.481340069022668793e+00,1.000000000000000000e+00
-1.537533888505376112e+01,1.354781942828487828e+01,1.000000000000000000e+00
-1.874647681158858603e+01,-2.086018881879410980e+00,1.000000000000000000e+00
-1.841548344237031642e+01,-1.199413211513814126e+01,1.000000000000000000e+00
1.851772480994277359e+01,6.850430369669953556e+00,1.000000000000000000e+00
-5.199648154333016414e-01,1.699131830698892642e+01,1.000000000000000000e+00
-1.746074179128081028e+01,-2.130885407114637697e+00,1.000000000000000000e+00
2.074980260021153100e+01,-5.338439795355067297e+00,1.000000000000000000e+00
2.241520803513171245e+01,-5.683938977401072457e+00,1.000000000000000000e+00
-2.178559334548606685e+01,2.504910822961404993e+00,1.000000000000000000e+00
-1.414508041707358643e+01,-8.101768631586185876e+00,1.000000000000000000e+00
-1.862002290242275748e+01,8.616856625267361736e+00,1.000000000000000000e+00
-1.031203821148930544e+01,1.591904818440532132e+01,1.000000000000000000e+00
-1.629685765485212201e+01,-2.382938031825091674e+00,1.000000000000000000e+00
-1.132562067695731933e+01,-1.843466755631968468e+01,1.000000000000000000e+00
-1.452496608920110432e+01,-8.510516214915753608e+00,1.000000000000000000e+00
1.640941344250320810e+01,-2.349967766929355051e+00,1.000000000000000000e+00
1.895801817811362611e+01,1.279532674704763950e+00,1.000000000000000000e+00
1.685898478310680559e+01,-8.585000421609902954e-01,1.000000000000000000e+00
-2.355323719417258133e+01,-1.867342377437736234e+00,1.000000000000000000e+00
1.031000052146675472e+01,1.345785980751973554e+01,1.000000000000000000e+00
1.561726855543554215e+01,5.254893355492839646e+00,1.000000000000000000e+00
-9.814663453158873452e+00,1.967051263382919757e+01,1.000000000000000000e+00
-1.386540805399906162e+01,-1.203587962799444178e+01,1.000000000000000000e+00
-1.301101935751681005e+01,-9.983142649640374344e+00,1.000000000000000000e+00
-1.171509236657193576e+01,1.496626280438744061e+01,1.000000000000000000e+00
1.167693745437675368e+01,1.207543933812325498e+01,1.000000000000000000e+00
-1.567005104152508821e+01,-7.694244936710157745e+00,1.000000000000000000e+00
7.594297107755436649e+00,1.938724680764088504e+01,1.000000000000000000e+00
-1.166557231242479098e+01,-1.525600786631990324e+01,1.000000000000000000e+00
1.802869488426354394e+01,9.660607718670391364e+00,1.000000000000000000e+00
1.674728765281428622e+01,1.538616827684373156e+01,1.000000000000000000e+00
2.329746424154684803e+01,-2.516275632552658070e+00,1.000000000000000000e+00
2.795203593960862598e+00,1.718978437221393207e+01,1.000000000000000000e+00
7.664639447149939500e+00,-1.937731464290527583e+01,1.000000000000000000e+00
1.723841704768033978e+01,-4.493031017537385097e+00,1.000000000000000000e+00
-1.349355288713674561e+01,-1.460321966984954400e+01,1.000000000000000000e+00
1.813211287699012431e+01,-1.168412345696741284e+01,1.000000000000000000e+00
-1.875536871361635960e+01,-1.433926831336835583e+01,1.000000000000000000e+00
1.777486246180380647e+01,-8.965987135167223343e+00,1.000000000000000000e+00
2.070525330083701832e+01,7.680707460288881627e+00,1.000000000000000000e+00
-1.045274253331607817e+01,1.410796217549621190e+01,1.000000000000000000e+00
-1.671227927663892387e+01,1.483176419058371920e+01,1.000000000000000000e+00
-2.028412579269172511e+01,-1.164033040208841463e+01,1.000000000000000000e+00
1.484901399967457891e+01,-7.403971040192215192e+00,1.000000000000000000e+00
-1.403252746950399477e+01,1.489423762483883174e+01,1.000000000000000000e+00
1.649330199788062146e+01,-5.027199259991481206e+00,1.000000000000000000e+00
1.628299339557154823e+01,9.776129193439311749e+00,1.000000000000000000e+00
-1.471821765988692832e+01,-1.274770175500240121e+01,1.000000000000000000e+00
-2.265205038433772344e+01,-5.273292845865867662e+00,1.000000000000000000e+00
-9.444264631545278732e+00,1.515886911263916303e+01,1.000000000000000000e+00
4.043266122186780720e+00,-2.286775294044096185e+01,1.000000000000000000e+00
-5.022929194249878826e+00,1.829883608569098641e+01,1.000000000000000000e+00
6.010132267597817490e-01,-2.269799887835729635e+01,1.000000000000000000e+00
1.094309352500864918e+01,1.683686507570662272e+01,1.000000000000000000e+00
-7.244448775989381417e+00,-1.527115111705389516e+01,1.000000000000000000e+00
-1.983678351590502942e+01,8.445929871272308986e+00,1.000000000000000000e+00
2.039685192868745744e+01,-6.904852343871127340e-01,1.000000000000000000e+00
-5.563240229470832965e+00,-1.838760877307888109e+01,1.000000000000000000e+00
1.567973312694492627e+01,-8.216260946740296944e+00,1.000000000000000000e+00
-1.699926940884898485e+01,1.304248754658484977e+01,1.000000000000000000e+00
2.146067659012629036e+01,7.972298139149521568e+00,1.000000000000000000e+00
-1.714946669785888389e+01,-1.239205977614868992e+01,1.000000000000000000e+00
-9.133159500043866785e+00,1.316527462303929852e+01,1.000000000000000000e+00
1.949542885121009661e+01,-4.755821190359950101e+00,1.000000000000000000e+00
1.758784465262350949e+01,-3.024247953202296557e+00,1.000000000000000000e+00
2.316183669546501012e+00,1.792581821698398059e+01,1.000000000000000000e+00
-3.874403224320596806e+00,1.719563605293987507e+01,1.000000000000000000e+00
1.673479038677152531e+01,1.681597401314791185e+01,1.000000000000000000e+00
1.768737536825787160e+01,-2.544767122923435876e-01,1.000000000000000000e+00
1.487046462239019107e+01,6.413010657495455291e+00,1.000000000000000000e+00
1.947951286015037198e+01,4.722271365689197253e+00,1.000000000000000000e+00
-1.524706902936355313e+01,-1.029427503048526127e+01,1.000000000000000000e+00
1.379481431270261460e+01,1.628169717477686618e+01,1.000000000000000000e+00
1.362924150830941450e+01,1.825248836436263034e+01,1.000000000000000000e+00
2.109537520551469214e+01,3.085311315878485505e+00,1.000000000000000000e+00
-1.940133588519703167e+01,-6.955817321976740963e+00,1.000000000000000000e+00
1.487080455326461070e+01,-9.285178375103486204e+00,1.000000000000000000e+00
1.116213775484291482e+01,-1.556849098986591784e+01,1.000000000000000000e+00
-1.001729175779743208e+01,-1.621479619750725831e+01,1.000000000000000000e+00
-8.365844374272201067e-01,2.160080821044751787e+01,1.000000000000000000e+00
-9.823513218967070415e+00,2.164210202731340615e+01,1.000000000000000000e+00
-1.504989138139720239e+01,-7.404669774650498582e+00,1.000000000000000000e+00
-1.860669148147666618e+01,-6.592957807040463969e+00,1.000000000000000000e+00
1.691309845875895590e+01,1.244606399846592737e+01,1.000000000000000000e+00
8.147214228509078282e+00,1.573722042505914587e+01,1.000000000000000000e+00
-1.263493833040107184e+01,-1.567137247846872583e+01,1.000000000000000000e+00
-1.256934220439505978e+01,-1.892833280789729145e+01,1.000000000000000000e+00
-1.001072282682530901e+00,2.241726582770620979e+01,1.000000000000000000e+00
1.736803339613195973e+01,8.958774078558725762e+00,1.000000000000000000e+00
-2.131033698401920518e+01,7.763011871574468259e+00,1.000000000000000000e+00
1.777700005694999419e+01,1.565687443388428335e+01,1.000000000000000000e+00
8.156406264876757461e+00,-1.538203333947896567e+01,1.000000000000000000e+00
1.535416930857535789e+01,1.073219100543042437e+01,1.000000000000000000e+00
1.393351876337050577e+01,1.437531766552787182e+01,1.000000000000000000e+00
-1.751198379986455578e+01,-5.165020091763743437e+00,1.000000000000000000e+00
1.240237820320886897e+01,-1.666745796346258501e+01,1.000000000000000000e+00
1.685374655644983477e+01,-1.672715126431511479e+01,1.000000000000000000e+00
-1.936918689493436219e+01,1.144643638294396659e+01,1.000000000000000000e+00
8.623293458190159910e+00,2.096192697864922749e+01,1.000000000000000000e+00
1.799856010395983930e+01,1.462766791697583280e+01,1.000000000000000000e+00
-7.349573717105968740e+00,-1.742430182240346781e+01,1.000000000000000000e+00
-9.343126549158796479e+00,1.688611527095216758e+01,1.000000000000000000e+00
1.787661108095623774e+01,5.328860327519521434e+00,1.000000000000000000e+00
1.789659771680197053e+01,3.845264879970244021e+00,1.000000000000000000e+00
-4.489666551565596464e+00,1.722137369702340592e+01,1.000000000000000000e+00
2.040698314659437074e+01,-5.531992448574443166e+00,1.000000000000000000e+00
-9.691908581855285476e+00,1.902948549559508251e+01,1.000000000000000000e+00
-7.410224453076865281e+00,2.158595909934987489e+01,1.000000000000000000e+00
7.689774304376260972e+00,-1.859797310491102351e+01,1.000000000000000000e+00
-4.494550632492879672e+00,-2.198983720648939766e+01,1.000000000000000000e+00
1.560586620340868080e+01,-1.430903591152745769e+01,1.000000000000000000e+00
-1.650051567374045902e+01,-1.021013700144491487e+01,1.000000000000000000e+00
7.464899787745848059e+00,-1.477802584368157213e+01,1.000000000000000000e+00
1.608677005761695256e+01,2.497804016041496045e+00,1.000000000000000000e+00
-1.832329726415541771e+01,1.562469368109879131e+00,1.000000000000000000e+00
1.488204674808572658e+00,-1.597126700925981524e+01,1.000000000000000000e+00
-1.711747104872819891e+00,1.907425139135742498e+01,1.000000000000000000e+00
-1.846386149004602117e+01,-1.188235505038806572e+01,1.000000000000000000e+00
1.990171207746382009e+01,-1.313517862727534080e+01,1.000000000000000000e+00

Loading…
Cancel
Save