热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python深度学习入门

基础字典#字典me{'height':180}print(me['height'])

基础

字典

# 字典
me = {\'height\': 180}
print(me[\'height\'])
me[\'weight\'] = 18
print(me)

读取图片
import matplotlib.pyplot as plt
from matplotlib.image import imread

img = imread(\'lena.jpg\')
plt.imshow(img)
plt.show()

 

#
class Man:
    def __init__(self, name):
        self.name  = name
        print("Initilized!")
    def hello(self):
        print("Hello " + self.name)
    def goodbye(self):
        print("Good bye "+self.name+" !")
m = Man("David")
m.hello()
m.goodbye()

 

numpy使用

# numpy使用
import numpy as np

x = np.array([1.0, 2, 3]) # 生成数组
print(x)
print(type(x))

A = np.array([[1, 2], [3, 4]])
print(A)
print(A.shape) # 行、列数量
print(A.dtype)

B = np.array([10, 20])
C = A * B # 广播
print(C)

print(A[0]) # 第0行元素

for row in A:
    print(row)

X = A.flatten() # 将 A 转换为一维数组
print(X)

 

matplotlib使用

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 6, 0.1) # 以0.1为单位,成0到6的数据
y1 = np.sin(x)
y2 = np.cos(x)

plt.plot(x, y1, label = "sin") # label 为图例
plt.plot(x, y2, linestyle = "--", label = "cos")
plt.xlabel("x")
plt.ylabel("y")
plt.title("sin & cos")
plt.legend() # 图例显示
plt.show()

 感知机

与门

# 感知机
def AND(x1, x2):
    # 与门
    w1, w2, theta = 0.5, 0.5, 0.7
    tmp = x1*w1 + x2*w2
    if tmp <= theta:
        return 0
    elif tmp > theta:
        return 1

 

import numpy as np
x = np.array([0, 1])
w = np.array([0.5, 0.5])
b = -0.7
print(w*x)
print(np.sum(w*x))
print(np.sum(w*x) + b)

 

def AND1(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1
a = AND1(0.2, 0)
print(a)

 

与、非、或、与非、异或

import numpy as np

def AND(x1, x2):
    # 与门
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1
def NAND(x1, x2):
    # 与非门
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])
    b = 0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1
def OR(x1, x2):
    # 或门
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.2
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1
def XOR(x1, x2):
    # 异或门
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y

if __name__=="__main__":
    for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
        y = AND(xs[0], xs[1])
        print(str(xs) + " -> " + str(y))

    for xs in[(0, 0), (1, 0), (0, 1), (1, 1)]:
        y = NAND(xs[0], xs[1])
        print(str(xs) + " -> " + str(y))

    for xs in [(0,0), (1, 0), (0,1 ), (1, 1)]:
        y = OR(xs[0], xs[1])
        print(str(xs) + " -> " + str(y))

    for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
        y = XOR(xs[0], xs[1])
        print(str(xs) + " -> " + str(y))

神经网络

激活函数

import numpy as np
import matplotlib.pylab as plt

def sigmoid(x):
    g = 1/(1+np.exp(-x))
    return g

def step_function(x):
    g = np.array(x>0, dtype=np.int)
    return g

x = np.arange(-5.0, 5.0, 0.1)
y1 = sigmoid(x)
y2 = step_function(x)

plt.plot(x, y1, label = \'sigmoid\')
plt.plot(x, y2, \'k--\', label = \'step_function\')
# plt.ylim(-0.1, 1.1) # 指定 y 轴的范围
plt.legend()
plt.show()

 

 

def relu(x):
    # relu函数
    # x <0 时 输出 0
    # x > 0 时 直接输出 x
    g = np.maximum(0, x)
    return g
x = np.arange(-5.0, 5.0, 0.1)
y = relu(x)
plt.plot(x,y,\'k--\',label = \'relu\')
plt.legend()
plt.ylim(-1.0, 5.0)
plt.show()

 

 

 

 

 

import numpy as np

def sigmoid(x):
    # 激活函数
    g = 1 / (1 + np.exp(-x))
    return g

def init_network():
    network = {}
    network[\'W1\']= np.array([[0.1, 0.3, 0.5],
                             [0.2, 0.4, 0.6]])
    network[\'b1\'] = np.array([0.1, 0.2, 0.3])
    network[\'W2\'] = np.array([[0.1, 0.4],
                              [0.2, 0.5],
                              [0.3, 0.6]])
    network[\'b2\'] = np.array([0.1, 0.2])
    network[\'W3\'] = np.array([[0.1, 0.3],
                              [0.2, 0.4]])
    network[\'b3\'] = np.array([0.1, 0.2])

    return network

def identity_function(x):
    # 恒等函数
    return x

def forward(network, x):
    W1, W2, W3 = network[\'W1\'], network[\'W2\'], network[\'W3\']
    b1, b2, b3 = network[\'b1\'], network[\'b2\'], network[\'b3\']

    a1 = np.dot(x, W1) + b1
    z1 = sigmoid(a1)
    a2 = np.dot(a1, W2) + b2
    z2 = sigmoid(a2)
    a3 = np.dot(z2, W3) + b3
    y = identity_function(a3)
    return y

network = init_network()
x = np.array([1.0, 0.5])
y = forward(network, x)
print(y)

 对输出函数进行改进

import numpy as np

def sigmoid(x):
    # 激活函数
    g = 1 / (1 + np.exp(-x))
    return g

def init_network():
    network = {}
    network[\'W1\']= np.array([[0.1, 0.3, 0.5],
                             [0.2, 0.4, 0.6]])
    network[\'b1\'] = np.array([0.1, 0.2, 0.3])
    network[\'W2\'] = np.array([[0.1, 0.4],
                              [0.2, 0.5],
                              [0.3, 0.6]])
    network[\'b2\'] = np.array([0.1, 0.2])
    network[\'W3\'] = np.array([[0.1, 0.3],
                              [0.2, 0.4]])
    network[\'b3\'] = np.array([0.1, 0.2])

    return network

def identity_function(x):
    # 输出函数
    # 恒等函数
    return x
def softmax(a):
    # 输出函数
    # 对 溢出问题 进行改进
    c = np.max(a)
    exp_a = np.exp(a -c) # 溢出问题的对策
    sum_exp_a = np.sum(exp_a)
    y = exp_a/sum_exp_a
    return y

def forward(network, x):
    W1, W2, W3 = network[\'W1\'], network[\'W2\'], network[\'W3\']
    b1, b2, b3 = network[\'b1\'], network[\'b2\'], network[\'b3\']

    a1 = np.dot(x, W1) + b1
    z1 = sigmoid(a1)
    a2 = np.dot(a1, W2) + b2
    z2 = sigmoid(a2)
    a3 = np.dot(z2, W3) + b3
    # y = identity_function(a3)
    y = softmax(a3)
    return y

network = init_network()
x = np.array([1.0, 0.5])
y = forward(network, x)
print(y)

 

 

单层感知机

import numpy as np
import random
import matplotlib.pyplot as plt

# sign function
def sign(v):
    if v > 0:
        return 1
    else:
        return -1

# train function to get weight and bias
def training():
    train_data1 = [[1, 3, 1], [2, 5, 1], [3, 8, 1], [2, 6, 1]]  # positive sample
    train_data2 = [[3, 1, -1], [4, 1, -1], [6, 2, -1], [7, 3, -1]]  # negative sample
    train_data = train_data1 + train_data2;

    weight = [0, 0]
    bias = 0
    learning_rate = 0.1

    train_num = int(input("train num:"))

    for i in range(train_num):
        train = random.choice(train_data)
        x1, x2, y = train;
        y_predict = sign(weight[0] * x1 + weight[1] * x2 + bias)
        print("train data:x:(%d, %d) y:%d ==>y_predict:%d" % (x1, x2, y, y_predict))
        if y * y_predict <= 0:
            weight[0] = weight[0] + learning_rate * y * x1
            weight[1] = weight[1] + learning_rate * y * x2
            bias = bias + learning_rate * y
            print("update weight and bias:")
            print(weight[0], weight[1], bias)
    print("stop training :")
    print(weight[0], weight[1], bias)

    # plot the train data and the hyper curve
    plt.plot(np.array(train_data1)[:, 0], np.array(train_data1)[:, 1], \'ro\')
    plt.plot(np.array(train_data2)[:, 0], np.array(train_data2)[:, 1], \'bo\')
    x_1 = []
    x_2 = []
    for i in range(-10, 10):
        x_1.append(i)
        x_2.append((-weight[0] * i - bias) / weight[1])
    plt.plot(x_1, x_2)
    plt.show()

    return weight, bias


# test function to predict
def test():
    weight, bias = training()
    while True:
        test_data = []
        data = input("enter q to quit,enter test data (x1, x2):")
        if data == \'q\':
            break
        test_data += [int(n) for n in data.split(\',\')]
        predict = sign(weight[0] * test_data[0] + weight[1] * test_data[1] + bias)
        print("predict==>%d" % predict)


if __name__ == "__main__":
    test()

 


推荐阅读
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • Go语言实现堆排序的详细教程
    本文主要介绍了Go语言实现堆排序的详细教程,包括大根堆的定义和完全二叉树的概念。通过图解和算法描述,详细介绍了堆排序的实现过程。堆排序是一种效率很高的排序算法,时间复杂度为O(nlgn)。阅读本文大约需要15分钟。 ... [详细]
  • 人工智能推理能力与假设检验
    最近Google的Deepmind开始研究如何让AI做数学题。这个问题的提出非常有启发,逻辑推理,发现新知识的能力应该是强人工智能出现自我意识之前最需要发展的能力。深度学习目前可以 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
author-avatar
吕小布
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有