深度学习环境搭建——floyd平台

2021年10月27日 更新:

  • floyd平台没有怎么用了。主要还是调试不方便。不太适合初学者
  • 适合初学者:Jeremy的《fastai deep learning for coders》有part1和Part2两门课程,私以为比较适合初学者入门。看完了这门课,再回去看吴恩达《深度学习》恍然大悟。
  • Jeremy say:不要把宝贵的时间浪费在配置环境上,他建议的是使用google colab,免费。而且google colab加载fastai的数据集都很快,那些数据集和权重weights都托管在AWS亚马逊的服务器上,非常快。但是由于大陆限制,我没有使用colab,老是掉线,不稳定。
  • 我转而使用了易学智能,就是需要一点钱。但是初始感受还是不错,适合先学习了视频之后,去感受代码。不过linux环境下比较好。fastai要使用jupyter notebook体验菜不错,使用pycharm感受不好。同时vscode 编辑器也不错。易学智能不用搭建环境,还是挺好的。
    • 不过Linux下解压数据集这些速度比windows快不少。还是要学习使用Linux
  • 由于有2080ti服务器,所以后期我是从易学智能下载了所有的数据集和权重,大约2小时可以下载完毕。然后自己搭建了docker环境,用vscode连接容器(容器中有fastai环境),在vscode中跑fastai的notebook,体验还不错。算是解锁了这门课的使用体验。
  • fastai可以让人实践,然后按照自己的想法修改代码,看结果,看变化。coding more,practise more。Jeremy真的不错,part2的课程带你看fastai整个库是怎么构建,没有什么魔法magic,没什么神奇的东西。
  • 希望大家的学习之路都能顺利,坚持下去!!(*^▽^*)

写在前面:

平台为floyd,知乎和CSDN等平台都有推荐这个深度学习平台 https://www.floydhub.com。本人是小白入门,仅看完了Coursera的吴恩达视频。由于项目需要,所以急需要跑跑demo了解一下,看了[AI开发]Python+Tensorflow打造自己的计算机视觉API服务 - 周见智 - 博客园的最后一段话如下:私以为是有道理的。因此迫切需要搭建其一个环境并快速上手试试!

在floyd上注册了账号,并通过paypal注册账号绑定借记卡,要验证这张卡(即让它无额度限制还是啥的),就可以在floyd上通过paypal付钱购买GPU服务,当然也有点贵,$12美元10小时的GPU服务。

[AI开发]目标跟踪之行为分析 - 周见智 - 博客园 IT周见智 

关于机器学习

AI开发离不开机器学习(深度学习),而机器学习涉及到的知识相对来讲非常广泛,不仅仅要求开发者掌握好编程技能,还对数学知识有较高的要求。

我认为作为普通程序员,如果要学习AI开发,请用一种Top Down的方式,抛开晦涩难懂的数学理论,先找个适合自己的机器学习框架(比如tensorflow或者基于它的keras),学会如何准备训练数据集(比如本文中如何去标记图片?),如何训练自己的模型,然后用训练得到的模型去解决一些小问题(比如本文中的图像目标检测)。等自己对机器学习有一种具体的认识之后,经过一段时间的摸索,会自然而然地引导我们去了解底层的数学原理,这个时候再去搞清楚这些原理是什么

个人认为,不要先上来就要搞懂什么是梯度下降优化法、什么是目标函数、什么是激活函数,什么是学习率...,这些概念确实需要掌握,但是不是你学习机器学习最开始的时候。另外学习机器学习,请使用Python。


1. quick start

https://docs.floydhub.com/getstarted/quick_start/ 官网的quick-start介绍

https://docs.floydhub.com/getstarted/get_started/ tutorial资料

FloydHub 初体验 - 知乎 知乎的floydHub初体验

  • 创建一个FloydHub帐户
  • floyd-cli在电脑上安装:我安装了anaconda,所以打开prompt,输入:
    pip install -U floyd-cli #安装floyd cli
    
    floyd login    #登录账号
    
    #克隆项目
    git clone https://github.com/floydhub/quick-start.git
    Cloning into 'quick-start'...
  • 运行代码的命令:之前在知乎上使用了 \ 有问题,去掉所有的 \ 后,得到了正确的训练结果。
floyd run --gpu --data mckay/datasets/mnist/1:/mnist --env tensorflow-1.3 "python train.py"
  1. 访问FloydHub Blog并创建一个FloydHub项目。我们称之为mnist-cnn
  2. 在您的终端中,用于git克隆FloydHub的快速入门 资料库。它包含我们将用来训练CNN的代码。克隆它并将目录切换到其中:
  3. 在终端中,使用Floyd CLI初始化项目(请确保使用在第一步中输入的名称):
  4. 然后,要在FloydHub的深度学习GPU服务器之一上运行训练脚本,我们将使用以下命令:
floyd run --gpu --data mckay/datasets/mnist/1:/mnist --env tensorflow-1.3 "python train.py"

然后,FloydHub做了如下的事情:

  • (1)将本地嗲吗同步到FloydHub的服务器

  • (2)在云上配置GPU实例(因为设置了--GPU 标志)

  • (3)设置具有GPU驱动程序和Tensorflow1.3的深度学习环境(因为将环境标志设置为--env tensorflow-1.3)

  • (4)再次环境中执行命令python train.py

  • (5)存储输出日志和生成的输出数据

  • (6)命令执行完成后终止GPU实例

floyd run:告诉CLI我们要run a job。

--gpu:我们要在GPU上运行

--data mckay/datasets/mnist/1:mnist:

 --env tensorflow-1.3:确保运行在一个有TensorFlow 1.3的服务器上

  • floyd status可以查看当前状态


train.py

'''
A Convolutional Network implementation example using TensorFlow library.
This example is using the MNIST database of handwritten digits
(http://yann.lecun.com/exdb/mnist/)

Author: Aymeric Damien
Project: https://github.com/aymericdamien/TensorFlow-Examples/
'''

from __future__ import print_function

import tensorflow as tf

# Import MNIST data
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/mnist", one_hot=True)

# Parameters
learning_rate = 0.001
training_iters = 200000
batch_size = 128
display_step = 10

# Network Parameters
n_input = 784 # MNIST data input (img shape: 28*28)
n_classes = 10 # MNIST total classes (0-9 digits)
dropout = 0.75 # Dropout, probability to keep units

# tf Graph input
x = tf.placeholder(tf.float32, [None, n_input], name="x")
y = tf.placeholder(tf.float32, [None, n_classes], name="y")
keep_prob = tf.placeholder(tf.float32, name="keep_prob") #dropout (keep probability)


# Create some wrappers for simplicity
def conv2d(x, W, b, strides=1):
    # Conv2D wrapper, with bias and relu activation
    x = tf.nn.conv2d(x, W, strides=[1, strides, strides, 1], padding='SAME')
    x = tf.nn.bias_add(x, b)
    return tf.nn.relu(x)


def maxpool2d(x, k=2):
    # MaxPool2D wrapper
    return tf.nn.max_pool(x, ksize=[1, k, k, 1], strides=[1, k, k, 1],
                          padding='SAME')


# Create model
def conv_net(x, weights, biases, dropout):
    # Reshape input picture
    x = tf.reshape(x, shape=[-1, 28, 28, 1])

    # Convolution Layer
    conv1 = conv2d(x, weights['wc1'], biases['bc1'])
    # Max Pooling (down-sampling)
    conv1 = maxpool2d(conv1, k=2)

    # Convolution Layer
    conv2 = conv2d(conv1, weights['wc2'], biases['bc2'])
    # Max Pooling (down-sampling)
    conv2 = maxpool2d(conv2, k=2)

    # Fully connected layer
    # Reshape conv2 output to fit fully connected layer input
    fc1 = tf.reshape(conv2, [-1, weights['wd1'].get_shape().as_list()[0]])
    fc1 = tf.add(tf.matmul(fc1, weights['wd1']), biases['bd1'])
    fc1 = tf.nn.relu(fc1)
    # Apply Dropout
    fc1 = tf.nn.dropout(fc1, dropout)

    # Output, class prediction
    out = tf.add(tf.matmul(fc1, weights['out']), biases['out'])
    return out

# Store layers weight & bias
weights = {
    # 5x5 conv, 1 input, 32 outputs
    'wc1': tf.Variable(tf.random_normal([5, 5, 1, 32])),
    # 5x5 conv, 32 inputs, 64 outputs
    'wc2': tf.Variable(tf.random_normal([5, 5, 32, 64])),
    # fully connected, 7*7*64 inputs, 1024 outputs
    'wd1': tf.Variable(tf.random_normal([7*7*64, 1024])),
    # 1024 inputs, 10 outputs (class prediction)
    'out': tf.Variable(tf.random_normal([1024, n_classes]))
}

biases = {
    'bc1': tf.Variable(tf.random_normal([32])),
    'bc2': tf.Variable(tf.random_normal([64])),
    'bd1': tf.Variable(tf.random_normal([1024])),
    'out': tf.Variable(tf.random_normal([n_classes]))
}

# Construct model
pred = conv_net(x, weights, biases, keep_prob)

# Define loss and optimizer
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)

# Evaluate model
correct_pred = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32), name="accuracy")

# Initializing the variables
init = tf.global_variables_initializer()
builder = tf.saved_model.builder.SavedModelBuilder("cnn_model")

# Launch the graph
with tf.Session() as sess:
    sess.run(init)
    step = 1
    # Keep training until reach max iterations
    while step * batch_size < training_iters:
        batch_x, batch_y = mnist.train.next_batch(batch_size)
        # Run optimization op (backprop)
        sess.run(optimizer, feed_dict={x: batch_x, y: batch_y,
                                       keep_prob: dropout})
        if step % display_step == 0:
            # Calculate batch loss and accuracy
            loss, acc = sess.run([cost, accuracy], feed_dict={x: batch_x,
                                                              y: batch_y,
                                                              keep_prob: 1.})
            print("Iter " + str(step*batch_size) + ", Minibatch Loss= " + \
                  "{:.6f}".format(loss) + ", Training Accuracy= " + \
                  "{:.5f}".format(acc))
        step += 1
    print("Optimization Finished!")

    builder.add_meta_graph_and_variables(sess, ["EVALUATING"])
builder.save()


1. floyd+tensorflow+svm+自己的数据集训练

由于需要进行行人识别,使用了HOG+SVM,但是制作的训练集的数据量是2W,opencv+libsvm的速度太慢了。

  • 企图验证大数据量下的模型鲁棒性,特别是负样本加入能否大幅度降低虚警率
  • 同时负样本包括车、环境、且不同尺度下的环境。1W的负样本数据,1W的<30pixel行人数据。

1.1 floyd+tensorflow入门学习

TensorFlow教程:TensorFlow快速入门教程(非常详细)

https://github.com/jikexueyuanwiki/tensorflow-zh 极客学院的翻译的官方的文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值